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

Wil*_*lco 4 php email smtp email-headers

我有一个PHP脚本,我的邮件服务器通过STDIN管道发送电子邮件.有一种简单/非复杂的方式来获取原始电子邮件字符串并将其发送/转发/转发到特定的电子邮件地址吗?

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

在最小化"骚扰"原始电子邮件内容的情况下,建议的方法是什么?

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

小智 8

我有同样的问题,但找到了一个接缝工作的解决方案.用PHP打开一个套接字并"telnet"原始的emaildata.像这样的东西:

  $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); 
Run Code Online (Sandbox Code Playgroud)

如果你不知道它,你可能需要查找mx-host.谷歌有一个答案,我敢肯定.