在perl中最简单的推荐外发邮件?

时间:2013-04-16 16:02:59

标签: perl email

我想设置一个基本的电子邮件发件人。这是为了验证我网站上的用户的电子邮件,并给他们一个令牌点击。服务器未设置电子邮件。它是一个普通的ubuntu盒子,我真的不想运行邮件服务器,部分是因为我不想让另一个开放端口担心。我也希望编程简单,避免垃圾邮件过滤器。

首先,我尝试了Gmail。

use Net::SMTP::TLS;
my $mailer = new Net::SMTP::TLS(  'smtp.gmail.com',
                  Hello   => 'smtp.gmail.com',
                  Port    => 587,
                  User    => $me2,
                  Password=> $pw);

但是我抱怨'Net :: SMTP :: TLS for Gmail =>无效的SSL_version'。

然后我尝试了Email :: Send :: Gmail。

my $email_address = $me;

($me =~ /^[\w\-_\.]+\@[\w\-_\.]+$/) or die "$email_address is invalid";

use Email::Send;
use Email::Send::Gmail;
use Email::Simple::Creator;

my $email = Email::Simple->create(
                  header => [
                         From    => $me,
                         To      => $me,
                         Subject => 'Testing',
                        ],
                  body => 'Testing email sending with perl.',
                 );

my $sender = Email::Send->new(
                  {   mailer      => 'Gmail',
                  mailer_args => [
                          username => $me2,
                          password => $pw,
                         ]
                  }
                 );
eval { $sender->send($email) };
die "Error sending email: $@" if $@;

这个人抱怨说不推荐使用Return :: Value。然后,它失败了 - 可能是因为我的gmail帐户上有双因素身份验证。这对我想要的东西来说太复杂了。

对于这个简单的任务,推荐的最简单方法是什么?

2 个答案:

答案 0 :(得分:1)

您选择的两个模块都不能正常工作,您应该使用Net::SMTP::TLS::ButMaintained而不是Net :: SMTP :: TLS和Email::Send::SMTP::Gmail而不是Email :: Send :: Gmail。您选择的模块是旧的,没有维护,并且已知会被破坏。

有时通过模块的CPAN页面检查可用的错误报告会有所帮助。

答案 1 :(得分:1)

电子邮件::发送现已弃用。这适用于我,使用首选的Email :: Sender:

use strict;
use warnings;

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

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

my $transport = Email::Sender::Transport::SMTPS->new({
  host => $smtpserver,
  port => $smtpport,
  ssl => "starttls",
  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 });