5

メールサーバーがSTDIN経由でメールをパイプしているPHPスクリプトがあります。生の電子メール文字列を取得して特定の電子メールアドレスに送信/転送/中継する簡単な/複雑でない方法はありますか?

私はPHPを使用することを躊躇します。mail()またはPear::Mail、私が知る限り、生の電子メールを渡すことができないためです。ヘッダーを解析する必要があるため、元の電子メールの内容が削除または変更されるリスクがあります。

元の電子メールの内容の「痴漢」を最小限に抑えてこれを行うための推奨される方法は何でしょうか。

注:組み込みのアプローチがない場合、これを行うのに役立つ可能性のある既存のライブラリはありますか?

4

3 に答える 3

9

私は同じ問題を抱えていましたが、うまくいく解決策を見つけました。PHPでソケットを開き、生の電子メールデータを「telnetting」します。このようなもの:

  $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を検索する必要があるかもしれません。グーグルは私が確信していることへの答えを持っています。

于 2011-08-21T13:13:26.673 に答える
0

PHPを使用したプレーンテキストの電子メールの送信に関するこの記事があります。ZendFrameworkのZend/Mail.phpパッケージを使用できます。

require_once 'Zend/Mail.php';
require_once 'Zend/Validate/EmailAddress.php';

$mail=new Zend_Mail();
$validator=new Zend_Validate_EmailAddress();

///////...
$mail->setBodyText(strip_tags($_POST['message']));
$mail->setBodyHtml($_POST['message']);

setBodyTextは、テキストのみの電子メールの代替mimeタイプヘッダーとして機能しますが、hmtlバージョンのsetBodyHtmlは機能します。

お役に立てば幸いです。それがうまくいくかどうか教えてください。

于 2011-07-09T03:13:13.510 に答える
0

私は同じ問題に直面していました。私が思いついた最善の解決策(Linux環境)は、生のメッセージをメールドロップにパイプし、目的の受信者を指定したmailfilterファイルを与えることでした。

これを行うと、Exchangeサーバーがメッセージを重複として識別することがわかりました。同じメッセージIDを持つメッセージが既にストアにあるため、reformailもパイプ処理して、新しいメッセージIDを生成し、最終的に次のようになります。

/usr/bin/reformail -R Message-ID: Original-Message-ID: -A'Message-ID:' | /usr/bin/maildrop maildrop-file

... proc_open()を使用して生の電子メールをPHPからの電子メールにフィードしました

「maildrop-file」には他に何も含まれていません

to "!recipient@domain.com"
于 2015-12-30T05:14:55.880 に答える