2011-08-22 89 views
0

我試圖使用MIME::Lite::TT::HTML發送電子郵件。它效果很好,但我無法弄清楚如何將它與附件一起使用。使用`MIME :: Lite :: TT :: HTML`發送電子郵件附件

我嘗試這樣做:

$msg->attr("content-type" => "multipart/mixed"); 
$msg->attach(Type => $mime, 
      Path => $attachment, 
      Filename => $name,); 

但它打破了消息。 HTML和TXT部分不再被解釋爲相同的東西,因此內容顯示兩次。

那麼使用MIME::Lite::TT::HTML添加附件的正確方法是什麼?

+0

如何你是在第一個地方創建'$ msg'嗎?我認爲你最好不要在創建消息後直接使用Content-Type。只需創建一條新消息,附上您想要附加的內容,並讓圖書館負責提供合適的類型。 – tripleee

+0

@tripleee嗯,我使用的代碼非常相似,這是在文檔中(減去編碼的東西)http://search.cpan.org/~chunzi/MIME-Lite-TT-HTML-0.03/lib /MIME/Lite/TT/HTML.pm –

+0

所以,如果你省略'$ msg-> attr()'調用,你會得到更好的結果嗎? – tripleee

回答

1

遺憾的是,似乎電子郵件不能同時具有替代零部件和附件。

我與MINE::Lite::TT和解,這似乎與代碼正常工作。現在不會有任何HTML電子郵件: -/

+0

你錯了,MIME消息可以通過正確地嵌套MIME部分來同時具有multipart/mixed和multipart/alternative。如果您正在尋找現代化的電子郵件創建模塊:http:// p3rl。org/Courriel :: Builder http://p3rl.org/Email::MIME::Kit和其他人可能在Email :: MIME ::'命名空間中。 – daxim

-1

我覺得MIME類型應該multipart/alternative的

+0

如果我設置'multipart/alternative',那麼附件將被完全跳過。 –

+0

'multipart/mixed'是附件的正確內容類型。 –

0

我遇到類似的問題附加PDF文件和模板HTML與動態圖像和字段(名稱,職業),我也使用MIME::Lite::TT::HTML和其他庫。

問題是,如果您沒有分開模板,或者您沒有包含庫HTML::Template;它會同時在附件中發送電子郵件正文中的文本和html文件。該模板只使用'text/html'。

這裏的工作代碼片段: 只要改變變量,以滿足您的需要:

模板HTML - test2.html

<html> 
    <head> 
     <title><TMPL_VAR NAME=profession></title> 
    </head> 
<body> 
<table> 
<tbody> 
    <tr> 
     <td> 
      <img src=<TMPL_VAR NAME=photo> alt="my photo" width="700"/> 
     </td> 
    </tr> 
    <tr > 
     <td> 
      <TMPL_VAR NAME=applicantname> 
     </td> 
    </tr> 
</tbody> 
</TABLE> 
</body> 
</html> 

下面是爲:email.pl

use strict; 
use warnings; 
use MIME::Lite::TT::HTML; 
#use MIME::Base64 qw(encode_base64); 
use Authen::SASL; 
use Net::SSL; 
use HTML::Template; 

my $from_address = '[email protected]'; 
my $to_address = '[email protected]'; 
my $mail_host = ''; 
my $mail_user = ''; 
my $mail_password = ''; 
my $mail_port = 25; 

my $template = HTML::Template->new(filename => 'test2.html'); 
$template->param(applicantname => "Applicant name"); 
$template->param(profession => "Designer"); 
$template->param(photo => "photo location or url path"); 

my $msg = MIME::Lite->new(
    From =>  $from_address, 
    To =>  $to_address, 
    Subject => 'Applicant Resume', 
    Type =>  'text/html', 
    Data =>  $template->output() 
); 
$msg->attach (
    Type => 'application/pdf', 
    Path => 'C:\Users\downloadfiles/filetest.pdf', 
    Filename => 'filetest.pdf', 
    Disposition => 'attachment' 
) or die "Error adding : $!\n"; 

$msg->send('smtp',$mail_host,HELLO=>$mail_host,PORT=>$mail_port,AuthUser=>$mail_user,AuthPass=>$mail_password,Timeout=>60); 
相關問題