【问题标题】:Sending email to multiple recipients向多个收件人发送电子邮件
【发布时间】:2012-05-18 06:12:44
【问题描述】:

我已将一些旧代码从旧的 unix 盒子移动到我们的新 unix 盒子,我在使用 perl 脚本向多个收件人发送电子邮件时遇到了一些困难。它适用于旧盒子。

旧版 perl:为 PA-RISC2.0 构建的版本 5.004_04

新盒子 perl:为 IA64.ARCHREV_0-thread-multi-LP64 构建的 v5.8.8

以下是脚本的基础知识(精简版):

use Net::SMTP::Multipart;
$to = "sam\@bogus.com tom\@foo.com";
$smtp = Net::SMTP::Multipart->new($smtpserver);
$smtp->Header(To    =>  $to,
      From  =>  "junk\@junk.com",
      Subj  =>  "This is a test.");
$smtp->Text("Hello, world!\n");
$smtp->End();

如果我将其更改为$to = "justOneEmail\@address.com",这将有效,但如果我有两个或多个电子邮件地址(以空格分隔),则它不再有效。我没有收到错误消息,但没有消息显示。

有什么想法吗?

【问题讨论】:

  • 你有一个新的 Unix 机器,它有一个六年前的 Perl 版本?有趣的新定义!但我想这是对你之前将近 15 年的版本的改进:-)
  • @Dave,哈哈。是的。 “新”是相对的。 :)

标签: perl email smtp multipart


【解决方案1】:

声明一个数组并把所有的email id都放在里面

@MailTo = ('mail1@demomail.com', 'mail2@demomail.com', ...., 'mailn@demomail.com')

现在使用Net::SMTP 模块发送邮件

$smtp->to(@MailTo);

【讨论】:

    【解决方案2】:

    去做like this:

    use Net::SMTP::Multipart;
    $to1 = "sam\@bogus.com"; 
    $to2 = 'tom@foo.com';
    $smtp = Net::SMTP::Multipart->new($smtpserver);
    $smtp->Header(To    =>  [ $to1, $to2, 'another_email@server.com' ],
                  From  =>  "junk\@junk.com",
                  Subj  =>  "This is a test.");
    $smtp->Text("Hello, world!\n");
    $smtp->End();
    

    请注意,如果您使用双引号,您应该转义电子邮件地址中的 @,否则 perl 可能会尝试将其解释为数组插值。

    【讨论】:

    • 那么Header下的To不是放邮箱的地方吗? CPAN 上的示例未显示您正在使用的属性:search.cpan.org/~orien/Net-SMTP-Multipart-1.5.4/Multipart.pm
    • 好吧,我的错,我以为您使用的是 Net::SMTP,但您使用的是 Net::SMTP::Multipart。我认为您的问题是您需要一个地址列表,即每个地址都是一个字符串,用逗号分隔这些字符串。为了更好地衡量,只需按照您提到的链接中的 CPAN 示例中的“CC”方式进行操作。编辑我的答案以反映这一点。
    • 好的。新手问题:如果我有 @tolist=['a@b.com','x@z.com']; 我如何将其传达给标题?像这样? To => @tolist?这不会弄乱参数列表吗?
    • @JonathanM,你会想写@tolist=('a@b.com','x@z.com'); 并将其作为To => \@tolist 传入 $tolist=['a@b.com','x@z.com']; 并将其作为To => $tolist 传入。
    • () 创建一个“列表”,它或多或少与数组相同。 @varname 是一个数组变量。 $varname 是一个标量变量(非数组,单值)。 \@array 或 [ x, y, z ] 创建一个对数组的 reference (或多或少像一个指向数组的指针,在 C 中)。所以你可以做 $scalar = \@array 或 $scalar = [x, y, z] - 见perldoc.perl.org/perlref.html
    【解决方案3】:

    不要使用空格分隔电子邮件地址,而是使用逗号,中间没有空格。这对我有用..

    【讨论】:

    • 你能提供代码作为你正在做什么的例子吗?
    猜你喜欢
    • 2017-12-05
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    相关资源
    最近更新 更多