2016-09-15 7 views
1

Email::MIMEオブジェクトを使用して電子メールを送信できるようにスクリプトを更新しようとしています。Perlでメールオブジェクトを作成してbody_strを後で更新する

私は電子メールオブジェクトを作成し、後でメッセージ本文を更新することができます。メッセージ本文はさまざまな状況によって変更される可能性があるためです。

私は次のエラーを取得の上に私がないとき、私は次のコード

my $message = Email::MIME->create(
    header_str => [ 
     From => '[email protected]', 
     To => '[email protected]', 
     Subject => 'This is the subject' 
    ], 
    attributes => { 
     encoding => 'quoted-printable', 
     charset => 'ISO-8859-1' 
    } 
); 

if ($i > 1) { 
    $message->body_str = "Here's one message"; 
} 
else { 
    $message->body_str = "Here's seconds message"; 
} 

を持っている:

Can't modify non-lvalue subroutine call

を私はbody_str

+1

問題の解決方法があります。しかし、あなたが必要とする詳細をすべて知った後でなければ、電子メールの作成を遅らせるだけでは不思議ではありません。 –

+0

私は同意します。半完成のメッセージを作成し、それが完了するまでぶら下がっているのはなぜですか? – Borodin

答えて

5

$message->body_strさを更新していますどこエラー行が参照していますgetメソッドは設定されていません。

あなたが探しているものはbody_setまたはおそらくbody_str_setです。

#!/usr/bin/perl 
use strict; 
use warnings; 
use Email::MIME; 
my $message = Email::MIME->create(
    header_str => [ 
     From => '[email protected]', 
     To => '[email protected]', 
     Subject => 'This is the subject' 
    ], 
    attributes => { 
     encoding => 'quoted-printable', 
     charset => 'ISO-8859-1' 
    } 
); 
#put your conditionals here 
print $message->body_set('Blah'); 
+0

それは、そのトリックをした、Googleのどこにそれを見つけることができませんでした。助けてくれてありがとう – Boardy

+3

Googleで探していたのはなぜですか?なぜ[モジュールのドキュメント](https://metacpan.org/pod/Email::MIME)を読んでいないのですか?あなたはあなたの質問にリンクしているので、あなたはそれが存在することを知っています。 –

+3

10kおめでとうございます。 – simbabque

1

文書によると、あなたは

本文テキストの値を変更するbody_setまたはbody_str_setを使用する必要があります使用

$message->body_set("Here's one message") 

簡単な7ビットのASCII文字列を渡したい場合は、または文字列がすでにメッセージの文字セットに適合するようにエンコードされている場合。モジュールは自動的に

それとも、一般的なエンコードされていないUnicode文字列を渡したい場合は

$message->body_str_set("Here's one message") 

を使用し、それを保存する前に設定したメッセージの文字に応じてそれをエンコードします。結果は、ファイルを書き込むときにエディタが採用するエンコーディングに依存するため、使用するリテラル文字列には注意が必要です。

通常、プログラムの最上部にuse utf8を追加することをお勧めします。エディタはUTF-8データを書き込みます。これにより、Perlはあなたのソースコードを読んでUTF-8としてデコードし、文字列を基本的なUnicodeデータとして格納して、body_str_setに渡すことができます。

関連する問題