【问题标题】:How to debug Email::Sender::Transport::SMTP::TLS?如何调试 Email::Sender::Transport::SMTP::TLS?
【发布时间】:2014-08-06 22:45:01
【问题描述】:

我正在开发一个通过 SMTP 发送电子邮件的应用程序。我有一个服务器,它同时支持 SMTP 和 SMTP::TLS。

通过 SMTP 发送有效。代码如下:

#!/usr/bin/perl

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.com';
my $smtpport     = 2525;
my $smtpuser     = 'test@server.com';
my $smtppassword = 'secret';

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

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

sendmail($email, { transport => $transport });

通过 SMTP::TLS 发送不起作用。

#!/usr/bin/perl

use strict;
use warnings;

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

my $smtpserver   = 'server.com';
my $smtpport     = 465;
my $smtpuser     = 'test@server.com';
my $smtppassword = 'secret';

my $transport = Email::Sender::Transport::SMTP::TLS->new({
  host     => $smtpserver,
  port     => $smtpport,
  username => $smtpuser,
  password => $smtppassword,
  debug    => 1,
});

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

sendmail($email, { transport => $transport });

我该如何调试,发生了什么?在Email::Sender::Transport::SMTP 添加debug => 1 后,我收到了调试消息。但是在SMTP::TLS 我不明白。

当前 TLS 版本只是挂起。

【问题讨论】:

    标签: perl email smtp


    【解决方案1】:

    试试https://metacpan.org/pod/Email::Sender::Transport::SMTPS

    在我刚发货的 0.03 中。我添加了调试 => 1。

    【讨论】:

    【解决方案2】:

    documentation 中,作者似乎将 sendmail 方法包装在 try/catch 中,如下所示:

    use strict;
    use warnings;
    use Email::Sender::Simple qw(sendmail);
    use Email::Sender::Transport::SMTP::TLS;
    use Try::Tiny;
    
    
    my $smtpserver   = 'server.com';
    my $smtpport     = 2525;
    my $smtpuser     = 'test@server.com';
    my $smtppassword = 'secret';
    
    my $transport = Email::Sender::Transport::SMTP::TLS->new({
        host     => $smtpserver,
        port     => $smtpport,
        username => $smtpuser,
        password => $smtppassword,
        debug    => 1,
    });
    
    my $email = Email::Simple->create(
      header => [
        To      => 'my-email@gmail.com',
        From    => $smtpuser,
        Subject => 'Hi!',
      ],
      body => "This is my TLS message\n",
    );
    
    try {
            sendmail($message, { transport => $transport });
        } catch {
            die "Error sending email: $_";
        };
    

    此外,他承认该模块处于 alpha 阶段,使用风险自负。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-25
      • 2015-06-05
      • 2020-07-05
      • 1970-01-01
      • 2015-11-12
      • 2012-07-07
      相关资源
      最近更新 更多