Учитывая, что письмо является сырым текстом, как я могу его отправить с помощью PHP?

У меня есть PHP-скрипт, который мой почтовый сервер пишет по электронной почте через STDIN. Есть ли простой / не запутанный способ взять необработанную строку электронной почты и отправить / переслать / передать ее на конкретный адрес электронной почты?

Я стесняюсь использовать mail() PHP mail() или Pear::Mail потому что, насколько я могу судить, я не могу просто передать сырое письмо. Я должен разбирать заголовки, тем самым рискуя удалить или изменить содержимое оригинального электронного письма.

Каким будет рекомендуемый способ сделать это с минимальным «досаждением» исходного содержимого электронной почты?

Примечание. Если нет встроенного подхода, существуют ли существующие библиотеки, которые могли бы мне помочь?

Solutions Collecting From Web of "Учитывая, что письмо является сырым текстом, как я могу его отправить с помощью PHP?"

У меня была та же проблема, но я нашел решение, которое швы для работы. Откройте сокет в 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, если вы этого не знаете. У Google есть ответ на это, я уверен.

В этой статье вы можете отправить текстовое электронное письмо с использованием PHP. Вы можете использовать Zend / Mail.php пакет из Zend Framework.

 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-типа для текстовой электронной почты, а setBodyHtml для версии hmtl.

Надеюсь, это поможет. Сообщите нам, если это сработает.

Я столкнулся с одной и той же проблемой, лучшим решением, которое я мог бы придумать (среда linux), было то, чтобы передать необработанное сообщение в maildrop и предоставить ему файл mailfilter, который только что указал предполагаемого получателя.

После этого я обнаружил, что Exchange-сервер идентифицирует это сообщение как дубликат, так как один с тем же идентификатором-идентификатором уже был в своем хранилище, поэтому я также перенаправил рефайле, чтобы создать новый идентификатор сообщения, в результате чего:

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

… загрузил сырое письмо в PHP с помощью proc_open ()

«maildrop-file» содержит ничего, кроме

 to "!recipient@domain.com"