如何使用 mandrill 生成多个收件人的数组

Posted

技术标签:

【中文标题】如何使用 mandrill 生成多个收件人的数组【英文标题】:How to generate an array of Multiple recipients using mandrill 【发布时间】:2014-01-04 07:33:23 【问题描述】:

我需要向多个收件人发送电子邮件。接收者的数量将根据数据库中的数据而有所不同。

Mandrill 允许我只使用数组添加多个收件人。

以下是适用于多个收件人的方法

//email array that needs to be added to the 'to' key
$emailArray = ["example@example.com","test@test.com","hello@test.com","world@test.com"];

$mandrill = new Mandrill('xxxxxxxxxxxxxxx');   
$message = array(
          'subject' => 'Thanks for signing up',
          'from_email' => 'support@test.com',
          'to' => array(

           array(
                'email' => 'hello@test.com',
                'name' => 'Hello Test'
               ),

              array(
               'email' => 'goodbye@test.com',
                'name' => 'Goodbye Test',
              )


            ),

            'global_merge_vars' => array(
                array(
                    'name' => 'FIRSTNAME',
                    'content' => 'JOHN'
                    ),
                array(
                    'name' => 'LASTNAME',
                    'content' => 'DOE')

            ));

        //print_r($message);

        $template_name = 'hello-world';


        print_r($mandrill->messages->sendTemplate($template_name, $template_content, $message));

下面是我需要根据 emailArray 的长度动态生成的内容

to' => array(
           //the below array should be dynamically generated   
           array(
                'email' => 'hello@test.com',
                'name' => 'Hello Test'
               ),

              array(
               'email' => 'goodbye@test.com',
                'name' => 'Goodbye Test',
              )


            )

这是数组。目前有固定值。

 //email array that needs to be added to the 'to' key
$emailArray = ["example@example.com","test@test.com","hello@test.com","world@test.com"];

我的问题是如何根据电子邮件数组的长度生成“收件人”值?

有没有办法让整个数组脚本内爆?

【问题讨论】:

你的'array'不是有效的php,没有问题 嗨 Dagon,这是我从 mandrill 文档中挑选的脚本。我需要根据 $emailArray 的长度生成“收件人”值。 $emailArray 不是有效的 php,你不能用它做任何事情 好的,你能帮我纠正一下吗?应该是 $array = array("foo" => "bar", "bar" => "foo", ); @william 是的,威廉,解决方案很简单。在 for 循环中运行它:/。但是您需要在 for 循环中初始化 mandrill,以便它适用于每次迭代。 【参考方案1】:

一种有效的方法是使用array_map 我在一些代码中添加了一些名称数组(我看不到您在代码中从哪里获取名称)。

$toAddresses = array('example@example.com','test@test.com','hello@test.com','world@test.com');
$names = array('Exmaple', 'Test', 'Hello', 'World');

$mandrillTo = array_map( function ($address, $name) 
    return array(
        'email' => $address,
        'name' => $name
    );
,
$toAddresses,
$names
);

这会将每个数组中的第 0 个元素传递给函数并返回一个包含两个值的数组,然后传递第一个、第二个等并将每个结果返回到一个新数组中 ($mandrillTo)

【讨论】:

以上是关于如何使用 mandrill 生成多个收件人的数组的主要内容,如果未能解决你的问题,请参考以下文章

Mandrill 通过 REST API 作为单独的消息发送给多个人

Mandrill API - 获取电子邮件的所有收件人

Mandrill 能否将退回的邮件信息发送到发件人电子邮件

如何修复 mandrill / mailchimp 事务性电子邮件问题收件人域不匹配

抄送收件人的 Mandrill 合并变量不起作用

使用带有 Mandrill 的 Smtp 客户端发送电子邮件