【问题标题】:PEAR::Mail with DSN SMTP servicePEAR::Mail 与 DSN SMTP 服务
【发布时间】:2012-01-09 20:48:49
【问题描述】:

您知道是否可以使用 PHP 中的 Pear Mail 功能设置 DSN 通信?

说明: 如果在 telnet 会话中编写此代码:

telnet smtp.example.com 25
[...]
mail from: me@example.com
250 2.1.0 Ok
rcpt to: you@fakemail.com NOTIFY=SUCCESS,FAILURE,DELAY ORCPT=rfc822;you@fakemail.com
250 2.1.5 Ok
[]

当我的 smpt 服务器发送电子邮件时,我收到了来自接收方 smtp 服务器(已中继、失败等)的带有状态代码的通知邮件。现在我想用 Pear Mail 做同样的事情,但我找不到你把这个选项放在哪里。

这是我的代码:

$messageTEXT= "..." // text_message
$messageHTML="..." // html message

$headers=array();
$headers['From'] = "me@example.com";
$headers['To'] = "you@fakemail.com";
$headers['Subject'] = "Test mail"; 
$headers['X-Mailer']="My PHP mailer";
$headers['X-Priority']=3;
$headers['Errors-To'] = "me@example.com";
$headers['Return-Path'] = "me@example.com";
$headers['Disposition-Notification-To'] =  "me@example.com";

$message = new Mail_mime();
$message->setTXTBody($messageTEXT);
$message->setHTMLBody($messageHTML);

$mimeparams=array();
$mimeparams['charset']= "UTF-8";
$mimeparams['text_encoding']="8bit";
$mimeparams['text_charset']="UTF-8";
$mimeparams['html_charset']="UTF-8";

$body = $message->get($mimeparams);

$headers = $message->headers($headers);

$smtp = Mail::factory(
   'smtp', 
    array(
        'host' => "smtp.example.com", 
        'port' => "25", 
        'auth' => true, 
        'username' => "myuser", 
        'password' => "mypass")
);

$mail=$smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
    print ("Error");
    return false;
}

http://pear.php.net/manual/en/package.mail.mail.php

【问题讨论】:

  • $headers['X-Mailer']="X-Mailer: My PHP mailer"; 应该读作$headers['X-Mailer']="My PHP mailer";——虽然这不是问题(甚至真的是a问题)

标签: php email smtp pear dsn


【解决方案1】:

你必须破解 PEAR::Mail 和 Net::SMTP 才能让它工作。

标准的Mail_smtp::send() 方法调用Mail_RFC822::parseAddressList(),它将拒绝额外的数据。注释掉这些行(大约第 274 行)应该可以帮助您入门。

那么你需要破解 Net_SMTP::rcptTo() 来传递原始数据,而不是用尖括号括起来。

如果您要绕过这些方法,请确保您的数据在其他地方进行了清理。

【讨论】:

    猜你喜欢
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 2016-08-06
    • 2014-03-30
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多