Swift-Mailer 错误,“给定 [] 邮箱中的地址不符合 RFC”

Posted

技术标签:

【中文标题】Swift-Mailer 错误,“给定 [] 邮箱中的地址不符合 RFC”【英文标题】:Swift-Mailer error, "Address in mailbox given [] does not comply with RFC" 【发布时间】:2011-09-24 09:09:36 【问题描述】:

我已经构建了一个简单的 php 联系表单,它应该通过 Swift-Mailer 脚本发送邮件。

问题是我一直收到这个错误

未捕获的异常 'Swift_RfcComplianceException' 与 message '给定邮箱中的地址 [] 不符合 RFC 2822, 3.6.2。'

我猜这意味着我使用了无效的电子邮件地址。但是由于我使用 myaddress@gmail.com 来测试脚本,所以问题可能出在其他地方。这是我的配置:

邮件发送到:

$my_mail = 'mymail@mydomain.com';
$my_name = 'My Name';

消息内容:

$name = trim($_POST['name']);
$email = trim($_POST['email']);
$message = trim($_POST['message']);
$date = date('d/m/Y H:i:s'); 
$ipaddress = $_SERVER['REMOTE_ADDR'];  

$content = $message.'\n\nSent on: '.$date.' From: '.$ipaddress;

我使用 swiftmailer 发送邮件的功能:

function send_mail () 
require('/path/to/swift_required.php');

//The means of transport
$transport = Swift_SmtpTransport::newInstance('mail.mydomain.com', 25);
$transport->setUsername('myusername');
$transport->setPassword('mypass');

$mailer = Swift_Mailer::newInstance($transport);

//The message
$mail = Swift_Message::newInstance();
$mail->setSubject('Hello');
$mail->setFrom(array($email => $name ));
$mail->setTo(array($my_mail => $my_name));
$mail->setBody($content, 'text/plain');

//Sending the message
$test = $mailer->send($mail);

if ($test) 
    echo '<p>Thank you for contacting us '.$name.'! We will get in touch soon.</p>';

else 
          echo '<p>Something went wrong. Please try again later.</p>';


如您所见,这是一个非常简单的表单,包含三个字段,名称、邮件和消息。我还为每个联系表单字段设置了其他验证,但我认为这里没什么问题。

感谢您的帮助。

编辑: 只需使用 gmail 作为 smtp 服务器进行测试。不幸的是,它仍然给出了完全相同的结果。

【问题讨论】:

在完成 trim/htmlspecialchars/strip_tags 工作后,将$email$my_email 的内容转储出来,看看它们长什么样。 swiftmailer 代码本身看起来没问题,所以地址可能在到达 swiftmailer 之前在某处被破坏了。 并删除strip_tagshtmlspecialchars。这两个函数并非设计用于处理电子邮件地址和姓名,而是用于处理 HTML。我认为您在这里混合了概念。做正确的逃跑,而不是脑残的逃跑。知道你做什么以及为什么! @Marc_B 这也是我所怀疑的。但他们是正确的......我的另一个猜测是错误是否指的是发送地址而不是接收地址?我将尝试使用 gmail 地址作为接收者以及使用 gmail smtp 服务器进行测试... @hakare 好的,我只留下了修剪功能,但我仍然得到同样的错误 【参考方案1】:

您的所有数据变量(地址、名称...)似乎都是全局的。除非您将全局变量作为参数传递(推荐方式)或使用global 关键字(或$GLOBALS 数组),否则无法从函数中读取全局变量。

【讨论】:

但是如何在Mail::send('filename' , $data, function($message)) .... 中定义全局变量? @TarangP 我的建议是你忘记了全局变量,它们只会让代码更难编写和维护。

以上是关于Swift-Mailer 错误,“给定 [] 邮箱中的地址不符合 RFC”的主要内容,如果未能解决你的问题,请参考以下文章

使用 XAMPP 的 Swiftmailer 问题

使用 php、gmail 和 swiftmailer 发送电子邮件会导致与 SSL 相关的错误

远程服务器返回错误: 404错误远程服务器返回错误:500错误 HttpWebResponse远程服务器返回错误:(404500) 错误。

Pig 安装错误:错误 pig.Main:错误 2998:未处理的内部错误

Informix 错误:发生了语法错误。错误代码:-201

我收到一个错误:“MetaMask - RPC 错误:错误:错误:[ethjs-rpc] rpc 错误与有效负载”