2016-09-15 20 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_setbody_str_set改變正文的價值

使用

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

,如果你想通過一個簡單的7位ASCII字符串,或者如果你的字符串已經被編碼以符合消息的字符集。該模塊將根據其存儲

或者使用

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

,如果你想通過一般的未編碼的Unicode字符串之前消息的字符集自動編碼。您需要小心使用的任何文字字符串,因爲結果取決於編輯器在編寫文件時採用的編碼方式

通常最好在程序頂部添加use utf8,並確保您的程序編輯器編寫UTF-8數據。這將導致Perl讀取您的源代碼並將其解碼爲UTF-8,將您的字符串存儲爲基本Un​​icode數據,您可以將其傳遞到body_str_set

相關問題