Perl 发送邮件时无法附加附件

Perl 发送邮件时无法附加附件,perl,Perl,任何人都可以在使用email::Simple发送电子邮件时帮助附加两个文本文件。我可以接收邮件,但没有附件 我已经尝试了很多,但无法使其工作,不确定我是否有不正确的模块。由于MIME::Lite的创建者的推荐,我不想使用MIME::Lite。我基本上想使用我自己的SMTP详细信息,并获得了Email::Sender作为推荐。除了附件,一切都正常 use strict; use warnings; use Email::Sender::Simple qw(sendmail); use Email

任何人都可以在使用email::Simple发送电子邮件时帮助附加两个文本文件。我可以接收邮件,但没有附件

我已经尝试了很多,但无法使其工作,不确定我是否有不正确的模块。由于MIME::Lite的创建者的推荐,我不想使用MIME::Lite。我基本上想使用我自己的SMTP详细信息,并获得了Email::Sender作为推荐。除了附件,一切都正常

use strict;
use warnings;

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

my $transport = Email::Sender::Transport::SMTP::TLS->new({
    host => 'smtp.office365.com',
    port => 587,
    sasl_username => 'abcsender@abc.com',
    sasl_password => 'P@ssw0rd@123',
    username => 'abcsender@abc.com',
    password => 'P@ssw0rd@123'
});

my @parts = (
        Email::MIME->create(
                attributes => {
                        content_type => "text/plain",
                        filename     => "/tmp/ERROR1493720941.log",
                        charset      => "US-ASCII",
                        disposition     =>"attachment",
                },    
                body => io( "/tmp/ERROR1493720941.log" )->all,
        ),
        Email::MIME->create(
                attributes => {
                        content_type => "text/plain",
                        filename     => "/tmp/FAILED1493720941.log",
                        charset      => "US-ASCII",
                        disposition     =>"attachment",
                },    
                body => io( "/tmp/FAILED1493720941.log" )->all,
        ),
);

my $email = Email::Simple->create(
  header => [
    To      => 'gsrivastava@abc.com',
    From    => 'abcsender@abc.com',
    Subject => 'Hi!',
  ],
  body => "Hello",
  parts      => [ @parts ],
);

sendmail($email, { transport => $transport });
正如@DaveCross在评论中所问,下面是$email->As\u字符串的输出

$VAR1 = 'To: gsrivastava@abc.com^M
From: abcsender@abc.com^M
Subject: Hi!^M
Date: Sun, 7 May 2017 07:58:46 -0400^M
^M
Hello^M

事实证明,这是一个非常简单的错误。您正在创建MIME电子邮件,但在创建实际电子邮件对象时,您使用以下代码:

my $email = Email::Simple->create(
  header => [
    To      => 'gsrivastava@abc.com',
    From    => 'abcsender@abc.com',
    Subject => 'Hi!',
  ],
  body => "Hello",
  parts      => [ @parts ],
);
电子邮件::Simple不适用于MIME邮件消息,因此它不理解
parts
属性并忽略它。要创建MIME电子邮件,需要使用email::MIME

my $email = Email::MIME->create(
  header => [
    To      => 'gsrivastava@abc.com',
    From    => 'abcsender@abc.com',
    Subject => 'Hi!',
  ],
  parts      => [ @parts ],
);
注意,我已经删除了
body
属性。MIME电子邮件不能既有部分又有正文。解决方案是在包含正文的
@parts
中添加另一个元素

my @parts = (
        Email::MIME->create(
                attributes => {
                        content_type => 'text/plain',
                        disposition  => 'attachment',
                        charset      => 'US-ASCII',
                        encoding     => 'quoted-printable',
                },
                body_str => 'Hello',
        ),

        ...
);

事实证明,这是一个非常简单的错误。您正在创建MIME电子邮件,但在创建实际电子邮件对象时,您使用以下代码:

my $email = Email::Simple->create(
  header => [
    To      => 'gsrivastava@abc.com',
    From    => 'abcsender@abc.com',
    Subject => 'Hi!',
  ],
  body => "Hello",
  parts      => [ @parts ],
);
电子邮件::Simple不适用于MIME邮件消息,因此它不理解
parts
属性并忽略它。要创建MIME电子邮件,需要使用email::MIME

my $email = Email::MIME->create(
  header => [
    To      => 'gsrivastava@abc.com',
    From    => 'abcsender@abc.com',
    Subject => 'Hi!',
  ],
  parts      => [ @parts ],
);
注意,我已经删除了
body
属性。MIME电子邮件不能既有部分又有正文。解决方案是在包含正文的
@parts
中添加另一个元素

my @parts = (
        Email::MIME->create(
                attributes => {
                        content_type => 'text/plain',
                        disposition  => 'attachment',
                        charset      => 'US-ASCII',
                        encoding     => 'quoted-printable',
                },
                body_str => 'Hello',
        ),

        ...
);

如果您在发送邮件之前将
$email->打印为_string
,您会看到什么?@DaveCross$VAR1=”发送至:gsrivastava@abc.com^我来自:abcsender@abc.com^M主题:嗨^M日期:2017年5月7日星期日07:58:46-0400^M^M你好^M';请在你的问题中加上这个。评论中的内容基本上不可读。@DaveCross我在问题中更新了这一点。如果您在发送邮件之前将
$email->打印为字符串,您会看到什么?@DaveCross$VAR1='gsrivastava@abc.com^我来自:abcsender@abc.com^M主题:嗨^M日期:2017年5月7日星期日07:58:46-0400^M^M你好^M';请在你的问题中加上这个。这在评论中基本上是不可读的。@DaveCross我在问题中更新了这一点