2017-05-04 28 views
1

Email :: Simpleを使用してメールを送信している間に、誰でも2つのテキストファイルを添付してください。私は添付ファイルなしでメールを受け取ることができますメールを送信中に添付ファイルを添付できません

私は多くを試しましたが、正しく動作させることができませんでした。間違ったモジュールを持っているかどうかはわかりません。私は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 => '[email protected]', 
    sasl_password => '[email protected]@123', 
    username => '[email protected]', 
    password => '[email protected]@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  => '[email protected]', 
    From => '[email protected]', 
    Subject => 'Hi!', 
    ], 
    body => "Hello", 
    parts  => [ @parts ], 
); 

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

コメントに@DaveCrossで尋ねたように、ここで$メール:の出力がある>

$VAR1 = 'To: [email protected]^M 
From: [email protected]^M 
Subject: Hi!^M 
Date: Sun, 7 May 2017 07:58:46 -0400^M 
^M 
Hello^M 
+0

メールを送信する直前に '$ email-> as_string'を印刷するとどうなりますか? –

+0

@DaveCross $ VAR1 = 'To:[email protected]^M 投稿者:[email protected]^M 件名:こんにちは^ 日付:Sun、7 May 2017 07:58:46 -0400^M ^ M こんにちは^ M '; – GrSrv

+0

質問に追加してください。コメントではほとんど読めません。 –

答えて

0

をas_stringこれを行うために、かなり単純なミスであることが判明しました。あなたは、MIMEの電子メールを作成しているが、あなたは実際の電子メールオブジェクトを作成し得るとき、あなたはこのコードを使用します

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

メール::シンプルでMIMEメールメッセージのために意図されていないが、それは理解していませんparts属性を削除し、無視します。 MIMEメールを作成するには、Email :: MIMEを使用する必要があります。

my $email = Email::MIME->create(
    header => [ 
    To  => '[email protected]', 
    From => '[email protected]', 
    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', 
     ), 

     ... 
); 
関連する問題