【问题标题】:Perl Email function Mime::LitePerl 电子邮件功能 Mime::Lite
【发布时间】:2018-01-16 22:24:21
【问题描述】:

我对 Perl 编程相当陌生。我需要有关使用 MIME::Lite 的基本 SMTP 的帮助,我已经下载了库并将其放在文件夹中。 这是我的代码

#!/usr/bin/perl

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

$to = 'sample@gmail.com';
$cc = 'sample@gmail.com';
$from = 'sample@gmail.com';
$pass = "my password here";
$subject = 'Test Email';
$message = 'This is test email sent by Perl Script';

$msg = MIME::Lite->new(
                 From     => $from,
                 To       => $to,
                 Cc       => $cc,
                 Subject  => $subject,
                 Data     => $message
                 );

# MIME::Lite->send('smtp', "smtp.gmail.com");
MIME::Lite->send('smtp', "smtp.gmail.com", Timeout=>60,Auth=>'LOGIN',AuthUser=>$from,AuthPass=>$pass,Port => 465, Debug => 1);
$msg->send;
print "Email Sent Successfully\n";

我收到以下错误:

MIME::LITE::SMTP>>> MIME::LITE::SMTP
MIME::LITE::SMTP>>> NET::SMTP(3.10)
MIME::LITE::SMTP>>> NET::CMD(3.10)
MIME::LITE::SMTP>>> EXPORTER(5.72)
MIME::LITE::SMTP>>> IO::SOCKET::IP(0.39)
MIME::LITE::SMTP>>> IO::SOCKET(1.38)
MIME::LITE::SMTP>>> IO::HANDLE(1.36)
MIME::LITE::SMTP>>> NET::CMD::GETLINE(): UNEXPECTED EOF ON COMMAND CHANNEL: AT C:/STRAWBERRY/PERL/LIBE/MIME/LITE.PM LINE 2622 AT MAIN.PL LINE 23
SMTP FAILED TO CONNECT TO MAIL SERVER: BAD FILE DESCRIPTOR AT LINE 23

我在这里遗漏了什么吗?我看到了教程,它对他们有用。

【问题讨论】:

  • 我永远无法理解为什么人们会使用 even the current maintainer 建议不要使用的模块。
  • @DaveCross 也许不知道?他们似乎是从过时的教程开始工作的。
  • @zdim:当然。但是,在研究这样的问题时,第一步肯定是“阅读模块的文档”,第二步是“看看是否有更新版本的模块”。所以没有理由不知道它。
  • @DaveCross 完全同意(无意暗示借口)。但不幸的是,人们经常不这样做。我最近刚刚建议一名 OP 阅读文档,可能在长时间的交流中读了三遍……只是第二天看到他们的新问题,在同一个模块上,仍然很清楚完全不知情。

标签: perl email smtp


【解决方案1】:

感谢大家的建议。所以由于 Mime::lite 不太好,我改变了对 Net::SMTP 的方法。下面是我的代码供将来参考。

另请注意,我无法使其适用于 google,但我们自己的 smtp 服务器可以正常运行代码。

#!perl
use warnings;
use strict;
use Net::SMTP;

my $smtpserver = 'mail server';
my $smtpport = 'port' ;
my $smtpuser   = 'sender@sample.com';
my $smtppassword = 'my password';


my $smtp = Net::SMTP->new($smtpserver, Port=>$smtpport, Timeout => 60, Debug => 1);
die "Could not connect to server!\n" unless $smtp; 

$smtp->auth($smtpuser, $smtppassword);
$smtp->mail('sender@sample.com');
$smtp->to('receiver@sample.com');

$smtp->data();
$smtp->datasend("To: receiver name <receiver\@sample.com>\n");
$smtp->datasend("From: sender name <sender\@sample.com>\n");
$smtp->datasend("subject: THIS IS A SUBJECT\n");
$smtp->datasend("\n");
$smtp->datasend("A simple test message\n");

$smtp->quit;

【讨论】:

  • 我想知道您为什么要联系MIME::Lite,但不知道它认为可能是有原因的。所以我克制了评论 - 我使用这个并且没有问题。
  • 我对 perl 非常陌生,并且在寻找 MIME::Lite 拥有最多示例的方法时。尽管我尝试了 Email::Simple 和 Net::SMTP 并没有真正工作。所以我又回到了 MIME::Lite。在我用完想法后,我发布了这个问题。然后我回到 Net::SMTP 并再次尝试然后它工作了。我尽量不使用 Mime。
  • SSL=&gt;1 添加到Net::SMTP-&gt;new(...) 选项。
  • SSL=>1 不工作(但据我所知它应该工作,因为如果我在 php 上使用它应该是 SSL => 1 离开你的网络)所以我试过SSL=> 0 现在,如果收件人在我的网络之外,它就可以工作。
猜你喜欢
  • 2011-05-23
  • 2011-05-06
  • 2014-07-18
  • 1970-01-01
  • 1970-01-01
  • 2013-05-22
  • 2014-08-21
  • 2012-04-22
  • 2014-11-15
相关资源
最近更新 更多