在Perl中创建Email对象并更新body_str

在Perl中创建Email对象并更新body_str,perl,email,Perl,Email,我正在尝试更新脚本,以便它可以使用该对象发送电子邮件 我创建电子邮件对象,然后稍后更新邮件正文,因为邮件正文可能会根据不同的情况而变化 我有以下代码 my $message = Email::MIME->create( header_str => [ From => 'someone@example.com', To => 'someoneelse@example.com', Subject => 'This

我正在尝试更新脚本,以便它可以使用该对象发送电子邮件

我创建电子邮件对象,然后稍后更新邮件正文,因为邮件正文可能会根据不同的情况而变化

我有以下代码

my $message = Email::MIME->create(
    header_str => [
        From => 'someone@example.com',
        To  => 'someoneelse@example.com',
        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";
}
执行上述操作时,会出现以下错误:

无法修改非左值子例程调用


错误行引用了我正在更新的
body\u str

$message->body\u str
是一个get方法,而不是set方法

您正在寻找的是
body\u set
,或者可能是
body\u str\u set

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

$message->body\u str
是一个get方法,而不是set方法

您正在寻找的是
body\u set
,或者可能是
body\u str\u set

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

根据文档,必须使用
body\u set
body\u str\u set
更改正文文本的值

使用

如果您想要传递一个简单的7位ASCII字符串,或者如果您的字符串已经编码为符合消息的字符集。模块将根据消息的字符集在存储之前自动对其进行编码

或使用

$message->body_str_set("Here's one message")
如果要传递常规的未编码Unicode字符串。您需要小心使用任何文本字符串,因为结果取决于编辑器在写入文件时采用的编码


通常最好在程序顶部添加
使用utf8
,并确保编辑器写入UTF-8数据。这将导致Perl读取您的源代码并将其解码为UTF-8,将字符串存储为基本Unicode数据,您可以将其传递到
body\u stru\u set
根据文档,您必须使用
body\u set
body\u stru\u set
来更改正文文本的值

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

如果您想要传递一个简单的7位ASCII字符串,或者如果您的字符串已经编码为符合消息的字符集。模块将根据消息的字符集在存储之前自动对其进行编码

或使用

$message->body_str_set("Here's one message")
如果要传递常规的未编码Unicode字符串。您需要小心使用任何文本字符串,因为结果取决于编辑器在写入文件时采用的编码


通常最好在程序顶部添加
使用utf8
,并确保编辑器写入UTF-8数据。这将导致Perl读取您的源代码并将其解码为UTF-8,将您的字符串存储为基本的Unicode数据,您可以将这些数据传递到
body\u str\u set

,而实现此目的的人在Google上找不到这些数据。谢谢你的帮助。你为什么要看谷歌?你为什么不读呢?你在问题中链接了它,所以你知道它的存在。祝贺你的10k:)@simbabque:Ha!谢谢:D@DaveCross事实上,我没有在问题中链接它——有人编辑了这个问题,认为他们添加了这个链接,但在谷歌的任何地方都找不到。谢谢你的帮助。你为什么要看谷歌?你为什么不读呢?你在问题中链接了它,所以你知道它的存在。祝贺你的10k:)@simbabque:Ha!谢谢:D@DaveCross事实上,我没有在问题中链接它-有人编辑了问题,认为他们添加了链接你有解决问题的方法。但是我忍不住想知道为什么你不把电子邮件的创建推迟到你知道你需要的所有细节之后。我同意。为什么你要创建一个完成了一半的消息,并让它一直挂着直到它可以完成?你有一个解决问题的方法。但是我忍不住想知道为什么你不把电子邮件的创建推迟到你知道你需要的所有细节之后。我同意。为什么要创建一条完成了一半的消息,并将其挂起,直到完成为止?
#!/usr/bin/perl
use strict;
use warnings;
use Email::MIME;
my $message = Email::MIME->create(
    header_str => [
        From => 'someone@example.com',
        To  => 'someoneelse@example.com',
        Subject => 'This is the subject'
    ],
    attributes => {
        encoding => 'quoted-printable',
        charset => 'ISO-8859-1'
    }
);
#put your conditionals here
print $message->body_set('Blah');