perl Email ::使用gmail发送失败并显示图片

时间:2016-12-14 22:17:55

标签: perl email gmail

这个问题与HTML image not showing in Gmail有关,但那里的答案没有(或不再有效)。

问题是我的perl程序(如下)在我的html格式的消息出现时就会失败,只要包含img标签就会发送。图像本身是否是从谷歌驱动器提供的并不重要。我猜我正在遇到一个新的gmail限制(我的脚本用来工作),但我不确定。

(当然,这个问题并不是我的收件人看不到图片;而是发送perl脚本因错误而中止 - 遗憾的是,没有更多信息向我解释为什么这是一个错误。当然,据我所知,我的收件人需要同意查看图片以防止跟踪。)

所以这是我的问题:

  1. 这是一个gmail还是perl模块问题?

  2. 是否可以发送图片,以便如果我的收件人想要查看 来自我网站的图片(最好不只是我的谷歌硬盘中的图片,如下面的例子所示),他们可以同意看到这个吗?

  3. 是否可以从谷歌那里获得更好的错误消息,说明它失败的原因?

  4. 这是[几乎]工作代码:

    #!/usr/bin/perl -w
    use strict;
    use warnings;
    
    use Email::MIME::CreateHTML;
    use Email::Send;
    use Email::Send::Gmail;
    
    my $toemail = 'ivo.welch@gmail.com';
    my $subject = 'testing image mailing';
    my $bodytext= '<html> <body> fails: <img src="https://drive.google.com/open?id=1K4psrWWolTSqx_f6MQP-T1-FMFpegT1Trg" alt="photo" />  </body> </html>\n';
    
    use readcredentials;
    my $gmailaccount= readcredentials( 'account' );
    my $gmailuserlogin= readcredentials( 'userlogin');
    my $gmailpasswd= readcredentials( 'gmailpassword');
    
    eval {
      my $message = Email::MIME->create_html(
                                             header => [
                                                        From   => $gmailaccount,
                                                        To      => $toemail,
                                                        Subject => $subject,
                                                       ],
                                             body => $bodytext,
                                            );
    
      my $sender = Email::Send->new(
                                    {   mailer      => 'Gmail',
                                        mailer_args => [
                                                        username => $gmailuserlogin,
                                                        password => $gmailpasswd,
                                                       ]
                                    }
                                   );
    
      $sender->send($message);
    };
    warn "Error sending email: $@" if $@;
    
    print STDERR "emailed!\n";
    

1 个答案:

答案 0 :(得分:2)

我运行了您的脚本,并进行了一些修改,以删除对readcredentials的依赖关系,使其在我的环境中运行,并且电子邮件的发送没有任何问题。问题可能是:

  1. 您的gmail凭据可能会出现问题。
  2. 脚本会下载并附加图像,因此您的本地环境可能会阻止图像下载。
  3. 但如果没有您的具体错误消息,则很难进一步诊断。