使用swiftmailer向多个收件人发送电子邮件

时间:2017-06-29 14:52:43

标签: php forms email swiftmailer newsletter

我正在尝试在我的项目中使用swiftmailer,以便我可以向多个用户发送html简报。我已经彻底搜查了但是我从来没有为我工作过。我想在逗号分隔的表单输入字段中粘贴多个收件人,并将html电子邮件发送给他们。 我将收件人设置为变量($recipients_emails)并将其传递给发送代码中的setTo()方法,与html_email相同。

问题是: Q1如何从收件人输入字段发送给多个收件人。

我试过了:

if (isset($_POST['recipients_emails'])) {
    $recipients_emails  = array($_POST['recipients_emails'] );
    $recipients_emails= implode(',',$recipients_emails);
}

Q2如何在heredoc标签内制作Html。当我尝试像->setBody('<<<EOT'.$html_email.'EOT;', 'text/html');这样连接时,我的消息会出现在heredoc标签中。

if (isset($_POST['html_email'])) {
    $html_email = $_POST['html_email'];
}

如何将$_POST['html_email'];的输入置于EOT标记内;

这是swiftmailer发送脚本的一部分;

$message = Swift_Message::newInstance()
        ->setSubject($subject)
        ->setFrom($from)
        ->setTo($recipients_emails)
        ->setBody($html_email, 'text/html');

Nota bene:我还在学习这些东西。

3 个答案:

答案 0 :(得分:3)

根据这份文件

// Using setTo() to set all recipients in one go
$message->setTo([
  'person1@example.org',
  'person2@otherdomain.org' => 'Person 2 Name',
  'person3@example.org',
  'person4@example.org',
  'person5@example.org' => 'Person 5 Name'
]);

您可以直接将数组输入到setTo,setCc或setBcc函数中,不需要将其转换为字符串

答案 1 :(得分:0)

好的,首先你需要创建一个形成你的heredoc内容的变量。 heredoc的结束标记必须在它之前没有空格,然后使用该变量。 (要输出heredoc中的变量,你需要用花括号包装它们)参见example ..

$body = <<<EOT
 Here is the email {$html_email}

EOT;

$message = Swift_Message::newInstance()
        ->setSubject($subject)
        ->setFrom($from)
        ->setTo($recipients_emails)
        ->setBody($body, 'text/html');

答案 2 :(得分:0)

您应首先将输入数据展开为单个电子邮件地址并将有效数据推送到数组中,以验证输入数据。在此之后,您可以将生成的数组提供给setTo()。

<input type="text" name="recipients" value="email1@host.com;email2@host.com;...">

提交

$recipients = array();

$emails = preg_split('/[;,]/', $_POST['recipients']);
foreach($emails as $email){
 //check and trim the Data
 if($valid){
  $recipients[] = trim($email);
  // do something else if valid
 }else{
  // Error-Handling goes here
 }
}