首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Perl中通过SMTP发送邮件

在Perl中通过SMTP发送邮件
EN

Stack Overflow用户
提问于 2012-04-04 17:18:34
回答 5查看 73.2K关注 0票数 18

我正在尝试在Perl中通过SMTP发送邮件。

我已经为此写了一个脚本。

代码语言:javascript
复制
#!perl
use warnings;
use strict;
use Net::SMTP;

my $smtpserver = 'server';
my $smtpport = 25;
my $smtpuser   = 'username';
my $smtppassword = 'password';

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

$smtp->auth($smtpuser, $smtppassword);
$smtp->to('mymail@gmail.com');
$smtp->data();
$smtp->datasend("To: mymail\@gmail.com\n");
$smtp->quit;

当我运行这个脚本时,我的输出如下:

代码语言:javascript
复制
Net::SMTP>>> Net::SMTP(2.31)
Net::SMTP>>>   Net::Cmd(2.29)
Net::SMTP>>>     Exporter(5.65)
Net::SMTP>>>   IO::Socket::INET(1.31)
Net::SMTP>>>     IO::Socket(1.32)
Net::SMTP>>>       IO::Handle(1.31)
Net::SMTP=GLOB(0x273faf0)<<< 220 server GMX Mailservices E
Net::SMTP=GLOB(0x273faf0)>>> EHLO localhost.localdomain
Net::SMTP=GLOB(0x273faf0)<<< 250-server GMX Mailservices
Net::SMTP=GLOB(0x273faf0)<<< 250-8BITMIME
Net::SMTP=GLOB(0x273faf0)<<< 250-ENHANCEDSTATUSCODES
Net::SMTP=GLOB(0x273faf0)<<< 250-SIZE
Net::SMTP=GLOB(0x273faf0)<<< 250-AUTH=LOGIN PLAIN
Net::SMTP=GLOB(0x273faf0)<<< 250-AUTH LOGIN PLAIN
Net::SMTP=GLOB(0x273faf0)<<< 250 STARTTLS
Net::SMTP=GLOB(0x273faf0)>>> RCPT TO:<mymail@gmail.com>
Net::SMTP=GLOB(0x273faf0)<<< 503 5.5.1 MAIL first {mp-eu001}
Net::SMTP=GLOB(0x273faf0)>>> DATA
Net::SMTP=GLOB(0x273faf0)<<< 503 5.5.1 MAIL first {mp-eu001}
Net::SMTP=GLOB(0x273faf0)>>> To: mymail@gmail.com
Net::SMTP=GLOB(0x273faf0)>>> .
Net::SMTP=GLOB(0x273faf0)<<< 502 5.5.2 Unimplemented {mp-eu001}
Net::SMTP=GLOB(0x273faf0)>>> QUIT
Net::SMTP=GLOB(0x273faf0)<<< 502 5.5.2 Unimplemented {mp-eu001}

我没有足够的关于Perl和SMTP的信息,所以我不能理解这个错误。

我该如何解决这个问题呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-04-04 17:54:51

您必须使用给定发件人电子邮件地址的MAIL命令启动SMTP会话(如有必要,在获得授权后)。这就是为什么响应会显示"MAIL first“(5xx是一个错误响应)。所以:

代码语言:javascript
复制
$smtp->auth($smtpuser, $smtppassword);
$smtp->mail('sender@example.com');
$smtp->to('mymail@gmail.com');

但是,如果您不是SMTP专家,为什么不使用更高级的模块,如Email::Sender,而不是低级的Net::SMTP

代码语言:javascript
复制
use strict;
use warnings;

use Email::Sender::Simple qw(sendmail);
use Email::Sender::Transport::SMTP ();
use Email::Simple ();
use Email::Simple::Creator ();

my $smtpserver = 'server';
my $smtpport = 25;
my $smtpuser   = 'username';
my $smtppassword = 'password';

my $transport = Email::Sender::Transport::SMTP->new({
  host => $smtpserver,
  port => $smtpport,
  sasl_username => $smtpuser,
  sasl_password => $smtppassword,
});

my $email = Email::Simple->create(
  header => [
    To      => 'mymail@gmail.com',
    From    => 'sender@example.com',
    Subject => 'Hi!',
  ],
  body => "This is my message\n",
);

sendmail($email, { transport => $transport });
票数 28
EN

Stack Overflow用户

发布于 2015-05-14 21:55:07

这是cjm脚本的更新版本,它当前使用STARTTLS处理Gmail (没有使用其他SMTP服务进行测试),它使用Email::Sender::Transport::SMTPS而不是Email::Sender::Transport::SMTP

你的OAuth账户必须允许“不太安全的应用程序访问”(“开启”) --“不太安全”并不意味着没有加密,它似乎只是意味着不使用gmail 2.0

代码语言:javascript
复制
use strict;
use warnings;

use Email::Sender::Simple qw(sendmail);
use Email::Sender::Transport::SMTPS;
use Email::Simple ();
use Email::Simple::Creator ();

my $smtpserver = 'smtp.gmail.com';
my $smtpport = 587;
my $smtpuser   = 'user@gmail.com';
my $smtppassword = 'password';

my $transport = Email::Sender::Transport::SMTPS->new({
  host => $smtpserver,
  ssl  => 'starttls',
  port => $smtpport,
  sasl_username => $smtpuser,
  sasl_password => $smtppassword,
  debug => 1,
});


my $email = Email::Simple->create(
  header => [
    To      => 'user@example.com',
    From    => 'whatever@gmail.com',
    Subject => 'Hi!',
  ],
  body => "This is my message\n",
);

sendmail($email, { transport => $transport });
票数 7
EN

Stack Overflow用户

发布于 2014-04-30 17:05:09

顺便说一句,尽管有点晚了,但对未来的读者来说,你真的看过邮件了吗?

附加的输出中没有错误。您已在构造函数中启用了调试(Debug=>1)。一旦您将其设置为0,这些消息就会消失。使用SMTP的好处是它包含在常规安装中。不需要添加模块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10008277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档