2011-08-22 75 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); 
相关问题