2016-09-06 8 views
0

私は多くのPerlライブラリがないため、MIME :: Liteを使いました。はい、私は何か他のものを使用しているはずですが、それは私のコントロールの範囲内ではありません。Perl MIME :: Liteネストされた境界

全体として、電子メールパッケージは「multipart/mixed」である必要があります。プレーンテキストバージョン、htmlバージョン、および添付ファイルを持ちます。問題は、電子メール本文にプレーンテキストとHTMLバージョンの両方が表示されていることです。

私はまだ "multipart/alternative"をサポートしたいので、プレーンテキストかhtmlを表示します。しかし、私は添付ファイルが必要なので、電子メール全体はtext/htmlバージョンのために "multipart/alternative"の内側境界セクションを持つ "multipart/mixed"でなければなりません。

私はうまくいきましたが、電子メールパッケージ全体が「multipart/alternative」だったため、添付ファイルを削除しました。私の受信トレイ内のいくつかの電子メールを調べると、最初に「混在」してから「代替」を持つことができることに気付きました。 div要素内のdiv :)ここ

のように私の現在のコードスニップは、(境界を画定し、私のコメントを見てください)です。

my $type = 'multipart/mixed'; 

sub sendMail { 
    my($from, $to, $subject, $messageHtml, $messageText, $type, %attachment) = @_; 

    my $msg = MIME::Lite->new(
      From  => $from, 
      To  => $to, 
      Subject => $subject, 
      Type  => $type, # multipart/mixed 
    ); 

    # -- start new boundary and multipart/alternative 
    if ($messageText ne '') { 
     $msg->attach(
       Type => 'text/plain; charset=UTF-8', 
       Encoding => 'quoted-printable', 
       Data => $messageText, 
     ); 
    } 

    if ($messageHtml ne '') { 
     $msg->attach(
       Type => 'text/html; charset=UTF-8', 
       Encoding => 'quoted-printable', 
       Data => $messageHtml, 
     ); 
    } 
    # -- end new boundary 

    if (%attachment) { 
     $msg->attach(
       Type  => $attachment{"type"}, 
       Encoding => 'base64', 
       Path  => $attachment{"path"}, 
       Filename => $attachment{"filename"}, 
       Disposition => 'attachment' 
     ); 
    } 

    if ($debugmode) { 
     my $result = ''; 
     $msg->print($result); 
     print $result; 
     exit; 
    } 

    if ($msg->send) { 
     return 1; 
    } 

    return 0; 
} 

HTMLとプレーンテキストの両方がいた場合、私はチェックするために、コードを変更します合格。私はよく知っている、彼らの1つだけが使用されている場合、私は代替手段が必要ないということです。

は再び、私はあなたが最初のmultipart/mixedとしてメッセージを作成する必要が

答えて

3

「マルチパート/代替」として、独自の境界内にあることを、プレーンテキストとHTMLのセクションを必要としています。このメッセージの内部には、multipart/alternativeという内部部品を作成する必要があります。この内部にHTMLとテキスト部分を添付します。そして、アタッチメントを外側(混合)部分に追加する必要があります。これは次のようなコードで実現することができます:

use strict; 
use warnings; 
use MIME::Lite; 

# main message is multipart/mixed 
my $msg = MIME::Lite->new(
    From => '[email protected]', 
    To  => '[email protected]', 
    Subject => 'some test message', 
    Type => 'multipart/mixed' 
); 

# inner part as multipart/alternative to include both HTML and text 
my $alternative = $msg->attach(
    Type => 'multipart/alternative', 
); 
$alternative->attach(
    Type => 'text/plain', 
    Data => 'some TEXT here' 
); 
$alternative->attach(
    Type => 'text/html', 
    Data => '<b>some HTML here</b>' 
); 

# attached image goes to main message 
$msg->attach(
    Type => 'image/gif', 
    Data => 'GIF89a....' 
); 

print $msg->as_string; 
+0

お世話になりました。このメソッドはドキュメント内にあるはずです:)しかし、彼らはあなたが別のライブラリを使用するべきであると言っています。残念ながら、私には選択肢がありませんでした。あなたの迅速で簡潔な応答に感謝します。 –

+0

@WadeShuler:実際に私はドキュメントをたどりました。ドキュメントの重要な部分は、 'attach'が新しい部分を返すことです。あるいは、あなたは完全な部分を構築してアタッチできるということです。しかし、はい、この複雑ではあるが典型的なユースケースの例は、ドキュメントでは便利です。 –

関連する問題