任何人都可以帮助您在使用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_string的输出
$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
答案 0 :(得分:0)
事实证明,这是一个非常简单的错误。您正在创建MIME电子邮件,但是当您创建实际的电子邮件对象时,您可以使用以下代码:
my $email = Email::Simple->create(
header => [
To => 'gsrivastava@abc.com',
From => 'abcsender@abc.com',
Subject => 'Hi!',
],
body => "Hello",
parts => [ @parts ],
);
Email :: 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',
),
...
);