php - 给定一封电子邮件作为原始文本,我如何使用 PHP 发送它?

标签 php email smtp email-headers

我有一个 PHP 脚本,我的邮件服务器通过 STDIN 将电子邮件传送到该脚本。是否有一种直接/不复杂的方法来获取原始电子邮件字符串并将其发送/转发/中继到特定的电子邮件地址?

我对使用 PHP 的 mail()Pear::Mail 犹豫不决,因为据我所知,我不能只传递原始电子邮件。我必须解析标题,从而冒着剥离或更改原始电子邮件内容的风险。

在对原始电子邮件内容进行最少“干扰”的情况下,推荐的方法是什么?

注意:如果没有内置方法,是否有任何现有的库可以帮助我做到这一点?

最佳答案

我遇到了同样的问题,但找到了一个可行的解决方案。在 PHP 中打开一个套接字并“远程登录”原始电子邮件数据。像这样:

  $lSmtpTalk = array(
    array('220', 'HELO my.hostname.com'.chr(10)),
    array('250', 'MAIL FROM: me@hostname.com'.chr(10)),
    array('250', 'RCPT TO: you@anotherhost.com'.chr(10)),
    array('250', 'DATA'.chr(10)),
    array('354', $lTheRawEmailStringWithHeadersAndBody.chr(10).'.'.chr(10)),
    array('250', 'QUIT'.chr(10)),
    array('221', ''));
  $lConnection = fsockopen('mail.anotherhost.dk', 25, $errno, $errstr, 1); 
  if (!$lConnection) abort('Cant relay, no connnection');  
  for ($i=0;$i<count($lSmtpTalk);$i++) {
    $lRes = fgets($lConnection, 256); 
    if (substr($lRes, 0, 3) !== $lSmtpTalk[$i][0]) 
      abort('Got '.$lRes.' - expected: '.$lSmtpTalk[$i][0]); 
    if ($lSmtpTalk[$i][1] !== '') 
      fputs($lConnection, $lSmtpTalk[$i][1]); 
  }  
  fclose($lConnection); 

如果您不知道 mx-host,您可能需要查找它。我敢肯定,Google 对此有答案。

关于php - 给定一封电子邮件作为原始文本,我如何使用 PHP 发送它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6632399/

相关文章:

.net - 为什么System.Net.Mail出现“身份验证失败”而System.Web.Mail却没有?

php - 从 Web 开发学习 Objective C (Cocoa) 进行 iPhone 编程?

javascript - Stripe 3dSecure createSource 在重定向网址中设置自定义参数

php - 返回屏幕命令的输出并使用 php 显示

javascript - 1000hz Bootstrap 验证无法正常工作

email - 电子邮件 header 是否区分大小写?

android - 使用 AccountManager token 的 IMAP/SMTP 身份验证

PHP 安全图像上传 - 附加代码?

email - Postfix 不发送邮件

javascript - 从自己的服务器发送电子邮件到互联网