在PHP中发送电子邮件时是否可以设置“消息到:”标题?

时间:2012-02-18 05:10:45

标签: php email

这是一个相对简单的问题,可能没有解决方案。

是否可以设置消息To:标头并以PHP格式发送电子邮件?请注意,消息收件人:信封收件人:标头不同。后者实际上确定了电子邮件的路由位置,前者只是确定它在收件人的电子邮件程序中显示的内容。

背景:我正在为自己设置一个小的一次性电子邮件服务,因此我收到带有PHP脚本的电子邮件,修改了一些标题,并将其重新发送到我的真实电子邮件地址。当我在真实的电子邮箱中收到消息时,我希望原始的收件人电子邮件地址(一次性电子邮件地址)仍显示在邮件上(对于客户端过滤规则等)。

这可能吗?我已经能够修改其他所有类型的标题,但这个标题让我感到困惑。

3 个答案:

答案 0 :(得分:0)

我在这里使用这样的东西:

$message = 'Your Message';
$subject = 'Your Subject';
$headers = 'Your headers';
$to = 'Address to send to';
$headers = 'Reply-To: Address'; //Perhaps you are looking for this?

mail($to,$subject,$message,$headers);

希望这适合你!

编辑:抱歉误解了你的问题。

答案 1 :(得分:0)

使用PHP发送电子邮件时,我总是使用一个使用STMP的自定义函数,在该函数中,它使用以下标题来设置我认为您尝试设置的名称:

"To: $nameto <$emailto>"

其中$ emailto是您发送给的实际电子邮件,$ nameto是您希望它显示的电子邮件地址。

这是我使用的函数,如果你需要更改任何其他标题你可以修改它们,它们是在函数的末尾:

/*
    Desc: Used to send emails from stmp server. Make sure to have the config variables set (at the top of function). Stores logs in array, you'll need to modify the function to actually use the array though.
    Params:
        String $from - Email address that the email is from. Ex. "john.smith@example.com"
        String $namefrom - Name to go along with the email address. Ex. "John Smith"
        String $to - Email address of the recipient of the email. Ex, "jane.doe@example.com"
        String $nameto - Name to go along with the email address. Ex. "Jane Doe"
        String $subject - Email subject.
        String $message - Main contents of email.
    Return: true on success false on failure.
*/
function amail($from, $namefrom, $to, $nameto, $subject, $message)
{
    $smtpServer = "";
    $port = 0;
    $username = "";
    $password = "";
    $timeout = 30;
    $localhost = "127.0.0.1";
    $newLine = "\r\n";
    $smtpConnect = fsockopen($smtpServer, $port, $errno, $errstr, $timeout) or die('Could not connect.');
    $smtpResponse = fgets($smtpConnect, 515);
    if(empty($smtpConnect)){
        return false;
    } else {
        $logArray['connection'] = "Connected: $smtpResponse";
    }
    fputs($smtpConnect, "HELO $localhost" . $newLine);
    $smtpResponse = fgets($smtpConnect, 515);
    $logArray['heloresponse'] = "$smtpResponse";
    fputs($smtpConnect,"AUTH LOGIN" . $newLine);
    $smtpResponse = fgets($smtpConnect, 515);
    $logArray['authrequest'] = "$smtpResponse";
    fputs($smtpConnect, base64_encode($username) . $newLine);
    $smtpResponse = fgets($smtpConnect, 515);
    $logArray['authusername'] = "$smtpResponse";
    fputs($smtpConnect, base64_encode($password) . $newLine);
    $smtpResponse = fgets($smtpConnect, 515);
    $logArray['authpassword'] = "$smtpResponse";
    fputs($smtpConnect, "MAIL FROM: $from" . $newLine);
    $smtpResponse = fgets($smtpConnect, 515);
    $logArray['mailfromresponse'] = "$smtpResponse";
    fputs($smtpConnect, "RCPT TO: $to" . $newLine);
    $smtpResponse = fgets($smtpConnect, 515);
    $logArray['mailtoresponse'] = "$smtpResponse";
    fputs($smtpConnect, "DATA" . $newLine);
    $smtpResponse = fgets($smtpConnect, 515);
    $logArray['data1response'] = "$smtpResponse";
    $headers = "MIME-Version: 1.0" . $newLine;
    $headers .= "Content-type: text/plain; charset=iso-8859-1" . $newLine;
    $headers .= "To: $nameto <$to>" . $newLine;
    $headers .= "From: $namefrom <$from>" . $newLine;
    $headers .= "Subject: $subject" . $newLine;
    fputs($smtpConnect, "$headers\n\n$message\n".$newLine.".".$newLine);
    $smtpResponse = fgets($smtpConnect, 1024);
    $logArray['data2response'] = "$smtpResponse";
    fputs($smtpConnect,"QUIT" . $newLine);
    $smtpResponse = fgets($smtpConnect, 515);
    $logArray['quitresponse'] = "$smtpResponse";
    return true;
}

答案 2 :(得分:0)

感谢大家的帮助!我找到了一个很好的解决方案,所以我想我会分享。

我最后只是扩展CodeIgniter的电子邮件类来设置一个 To 标题(我到目前为止开始称它为虚荣头,因为它看起来都没有实质内容)并通过SMTP发送。如果您想查看我所做的简单示例,请使用您自己的MY_Email.php文件扩展Email类(请参阅“用户指南”中的Extending Native Libraries部分)并从电子邮件中复制_build_headers()函数类。

    /**
 * Build final headers
 *
 * @access  protected
 * @param   string
 * @return  string
 */
protected function _build_headers()
{
    $this->_set_header('X-Sender', $this->clean_email($this->_headers['From']));
    $this->_set_header('X-Mailer', $this->useragent);
    $this->_set_header('X-Priority', $this->_priorities[$this->priority - 1]);
    $this->_set_header('Message-ID', $this->_get_message_id());
    $this->_set_header('Mime-Version', '1.0');
}

然后在Mime-Version行的正下方的行上添加您自己的标题,如下所示:

    $this->_set_header('To', 'person@example.com');

然后只需将常规电子邮件发送到您自己的电子邮件地址即可。您会注意到即使电子邮件到达您的地址,也会发送到person@example.com。

动臂。

如果你想真正使用我创建的完整MY_Email.php文件,为你自己的CodeIgniter项目see this gist添加一个“虚荣”选项。