使用 PHP PEAR MAIL 发送多个 CC 和 BCC

Posted

技术标签:

【中文标题】使用 PHP PEAR MAIL 发送多个 CC 和 BCC【英文标题】:Sending multiple CC's and BCCs with PHP PEAR MAIL 【发布时间】:2011-09-12 18:38:16 【问题描述】:

我有一个项目正在我的工作中工作,我正在使用 Pear 的邮件。我需要使用 smtp,因为我们需要能够从我们的邮件服务器跟踪所有内容。并且用户需要能够在发送基于公司的电子邮件之前登录。我们不能为此使用php的邮件功能。

我的问题是我在网上找不到任何用于发送 CC 和 Bcc 以及发送多个 BCC 的文档。用 php 的邮件功能很容易做到。你所做的就是像这样将它添加到 $header 变量中

$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

这是我使用 PEAR 的 php 函数的代码

function sender_mail($email,$subject,$mailmsg, $cc, $bcc)

    include("Mail.php");
    /* mail setup recipients, subject etc */

    //DEFAULT VALUE OF FROM 
    $from = "noreply@addata.net";

    //GET EMAIL OF USER
    $result = mysql_query("SELECT email, email_pass FROM u_perinfo WHERE user_id = '$_SESSION[uid]'")
    or die("There was an error when grabbing your email information");
    if(mysql_num_rows($result) > 0)
        $row = mysql_fetch_array($result);
        if($row[0] != '')
            $from = $row[0];
        
        $email_pass = $row[1];
    

    $recipients = "$email";
    $headers["From"] = "$from";
    $headers["To"] = "$email";
    $headers["Subject"] = $subject;
    $headers["Cc"] = "$cc";  //Line added by Me to see if it works
    $headers["Bcc"] = "$bcc";  //Line added by Me to see if it works


    //$mailmsg = "Welcome to Addatareference.com! \r\n\r\nBelow is your unique login information.  \r\n\r\n(Please do not share your login information.)$accountinfo";
    /* SMTP server name, port, user/passwd */
    $smtpinfo["host"] = "smtp.emailsrvr.com";
    $smtpinfo["port"] = "25";
    $smtpinfo["auth"] = true;
    $smtpinfo["username"] = "$from";
    $smtpinfo["password"] = "$email_pass";
    /* Create the mail object using the Mail::factory method */
    $mail_object =& Mail::factory("smtp", $smtpinfo);
    /* Ok send mail */
    $mail_object->send($recipients, $headers, $mailmsg);


我一直在努力寻找解决方案,但没有得到任何真实信息。如果有人可以帮助我解决这个问题,我将不胜感激。

【问题讨论】:

不知道您使用的 Mail.php 是什么,但我建议您改用 PHPMailer (phpmailer.worxware.com) 或 Swiftmailer (swiftmailer.org)。 您是否尝试将包括密件抄送和抄送地址在内的所有电子邮件地址添加到收件人列表中,然后在标题中指定抄送和密送地址? 另外,您是否可以从系统发送邮件。您的主机可能阻塞了 25 端口 我很确定@jrod 在这里有答案。将您要发送到的每个地址都放入收件人列表中,并使用标题区分“收件人”、“抄送”和“密送”。 似乎是一种非常奇怪的方式来组织地址的选择。我花了很长时间才弄清楚到底发生了什么。我想我可以 rtfm。对对对。 【参考方案1】:

在使用 PEAR Mail 功能时,Bcc 存在一个问题:Thunderbird 显示 Bcc 标头,因此收件人没有隐藏,这是 Bcc 的全部要点。它也显示在收件人:标题列表中(因为您必须在收件人中包含密件抄送列表)。

编辑:已解决 - 我从另一个站点发现解决方案只是将密件抄送列表包含在 $recipients 中,而不是任何标题中。有效!

因此:

$bcc = "foo@example.com";
$to = "bar@example.com";
$headers = array(..other stuff.., 'To' => $to, ..rest of header stuff); // No Bcc header!
$recipients = $to.", ".$bcc;
$mail = $smtp->send($recipients, $headers, $message);

编辑 #2:确认我的来源 - http://raamdev.com/2008/adding-cc-recipients-with-pear-mail/

【讨论】:

感谢来源信用。 :)(我意识到我的感谢有点晚了,但迟到总比没有好!) 这是更好的答案。我也刚刚对其进行了测试并使其正常工作。到目前为止(和这个答案)我无法解决密件抄送问题。 是的,但这不是真正的密件抄送,对吧?它只是发送多封电子邮件。【参考方案2】:

您是否尝试过添加多个地址“,”分隔?

$headers['Cc'] = 'cc@example.com, bb@example.com, dd@ex.com';

根据line 218 in the source,这可能有效。

【讨论】:

【参考方案3】:

您只需要在 $recipients 变量中将所有内容添加到、cc、bcc。标头决定发送到哪里。

【讨论】:

你能举个例子吗?

以上是关于使用 PHP PEAR MAIL 发送多个 CC 和 BCC的主要内容,如果未能解决你的问题,请参考以下文章

如何使用带有附件的 PEAR Mail 包使用 PHP 发送电子邮件

linux中php项目无法发送邮件:PEAR mail package is not installed

这个使用 Pear Mail 发送邮件的 PHP 脚本有啥问题?

使用 PEAR Mail 包发送邮件时出错

PHP Pear Mail 无法发送带有 Unicode 字符的名称

使用 PEAR 邮件发送测试消息时出现错误消息