MIME::Lite 不适用于 SMTP

Posted

技术标签:

【中文标题】MIME::Lite 不适用于 SMTP【英文标题】:MIME::Lite not working with SMTP 【发布时间】:2017-09-12 04:18:40 【问题描述】:

我一直使用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();

【问题讨论】:

如果您能准确解释您所看到的意外行为,将会有所帮助。另外,请向我们展示您之前有效的代码,以便我们进行比较。 邮件没有发送。我什至不确定如何调试它或在哪里检查任何错误。这是在共享托管服务器上。上述代码与有效代码之间的唯一区别是添加了以下行:MIME::Lite-&gt;send('smtp', $mailHost, AuthUser=&gt;$user, AuthPass=&gt;$pass);,根据 CPAN 文档调用 Net::SMTP 来发送消息。 您是否收到任何错误消息?是否有任何内容写入邮件日志? 我在哪里可以找到它?我在 Linux 服务器上使用 cPanel。 另外,尝试在对 $msg->send() 的调用中设置“MIME::Lite->send”中的值;因为看起来您的邮件主机、用户、密码仍然保持不变,所以通过 MIME::Lite->send 设置默认值可能不会增加太多价值。然后看答案,准备切换到支持更好的模块。 【参考方案1】:

我找到了解决方案。通过 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();

【讨论】:

【参考方案2】:

我不推荐 MIME::Lite。我并不孤单。当前的documentation for the module 说:

等等!

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

我推荐Email::Sender 或Email::Stuffer。它们都支持 SMTP 身份验证。

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

【讨论】:

以上是关于MIME::Lite 不适用于 SMTP的主要内容,如果未能解决你的问题,请参考以下文章

MIME::Lite 和消息 ID

MIME::Lite 3.030 - NET::SMTP 与 smtps(端口 465)

MIME::Lite 附加文件 perl 时出错

MIME::Lite 和内联 CSS 图像

在没有 Outlook 的 Windows 7 上设置 MIME::Lite

使用 MIME::Lite:TT 发送列表