MIME :: Lite无法使用SMTP

时间:2017-04-16 10:46:42

标签: perl email smtp sendmail

我一直使用MIME::Lite发送到我的邮件列表没有任何问题,但最近决定使用SMTP身份验证,因为我听说它更适合电子邮件来源验证。

我无法让它发挥作用。我检查并安装了Net::SMTP模块,我理解Mime::Lite用于此目的。

有什么想法吗?

这是我的代码:

my $mailHost = 'mail.domain.com';
my $user     = 'username';
my $pass     = 'password';
my $html     = 'someHTML';
my $text     = 'someText';

use MIME::Lite;

MIME::Lite->send( 'smtp', $mailHost, AuthUser => $user, AuthPass => $pass );

my $msg = MIME::Lite->new(
    From    => 'Mailing list <list@domain.com>',
    To      => $email,
    Subject => $subject,
    Type    => 'multipart/alternative'
);

$msg->attach(
    Type => 'TEXT',
    Data => $text
);

$msg->attach(
    Type => 'text/html',
    Data => $html
);

$msg->send();

2 个答案:

答案 0 :(得分:4)

我不推荐使用MIME :: Lite。而且我并不孤单。目前documentation for the module说:

  

<强> WAIT!

     

当前的维护者不推荐使用MIME :: Lite。有一个   替代品的数量,如Email :: MIME或MIME :: Entity和   Email :: Sender,您应该使用它。 MIME ::精简版   继续产生奇怪的错误报告,它没有收到大的   由于有更好的替代品,重构的数量。   请考虑使用其他东西。

我建议Email::SenderEmail::Stuffer。他们都支持SMTP身份验证。

但是,当然,这可能根本无法解决您的问题。如果问题出在您的SMTP配置上,则此更改将使您无法接近。我建议询问系统管理员保存邮件日志的位置,以便了解实际问题。

答案 1 :(得分:0)

我找到了解决方案。通过SMTP进行身份验证需要NET::SMTP。以下代码现在可用于发送包含MIME::LITESMTP的电子邮件:

my $mailHost = 'domain.com';
my $user     = 'username';
my $pass     = 'password';
my $html     = 'someHTML';
my $text     = 'someText';

use MIME::Lite;
use Net::SMTP;

MIME::Lite->send( 'smtp', $mailHost, AuthUser => $user, AuthPass => $pass );

my $msg = MIME::Lite->new(
    From    => 'Mailing list <list@domain.com>',
    To      => $email,
    Subject => $subject,
    Type    => 'multipart/alternative'
);

$msg->attach(
    Type => 'TEXT',
    Data => $text
);

$msg->attach(
    Type => 'text/html',
    Data => $html
);

$msg->send();