Как изменить «переадресованный» адрес электронной почты & quot; От & quot; и «Кому» раздел в переполнении стека

Я пытаюсь замаскировать электронные письма. В основном, отправьте электронное письмо клиенту, например «RandomName@MyDomain.com», и перешлите его «MyRealEmail@MyDomain.com».

Я отправляю электронные письма в скрипт php на моем сервере, где я хочу использовать «Кому» и «От», чтобы найти реального получателя сообщения и переслать ему сообщение, удалив любую идентифицируемую информацию из Отправителя (От ) раздел.

Я могу разобрать почти все данные прямо из заголовка, но моя проблема с телом. Часть тела HTML может сильно отличаться от разных источников. Outlook есть <html> а также <body> раздел, в то время как Gmail просто имеет <div>s. Несмотря на это, я получаю эти странные знаки «=» и в своем сыром электронном письме, как в текстовом, так и в HTML-разделах, например <=div>!

Я просто хочу изменить «От» и «Кому» и сохранить оставшуюся часть письма в точности такой же, какой она есть, чтобы в ее текстовом или HTML-разделе не было аномалий.

Как я могу это сделать? Должен ли я просто проанализировать необработанную электронную почту и изменить вхождения электронной почты? как я могу отправить его тогда? или я должен переделать письмо, используя phpmailer или какой-то другой класс? как я могу получить правильное тело тогда?

У моего хостинг-провайдера не установлено расширение MailParse, так как я видел некоторые решения на сайте, использующие это расширение, поэтому мне приходится делать это с использованием доступных расширений в PHP 5.5

ОБНОВИТЬ

Мне удалось выяснить = проблема была quoted-printableтеперь звоню quoted_printable_decode() чтобы решить эту проблему. Все еще пытаюсь найти лучший способ переслать письмо после изменения заголовка.

0

Решение

После многих неудачных попыток, наконец, есть решение, с которым я могу жить. Хост-сервер не хотел разрешать MailParse, потому что это была проблема в их среде общего хостинга, поэтому я пошел с Mail_mimeDecode а также Mail_MIME ГРУША расширения.

// Read the message from STDIN
$fd = fopen("php://stdin", "r");
$input = "";
while (!feof($fd)) {
$input .= fread($fd, 1024);
}
fclose($fd);

$params['include_bodies'] = true;
$params['decode_bodies']  = true;
$params['decode_headers'] = true;
$decoder = new Mail_mimeDecode($input);
$structure = $decoder->decode($params);

// get the header From and To email
$From = ExtractEmailAddress($structure->headers['from'])[0];
$To = ExtractEmailAddress($structure->headers['to'])[0];
$Subject = $structure->headers['subject'];

ExtractEmailAddress использует решение от «В PHP, как мне извлечь несколько адресов электронной почты из блока текста и поместить их в массив?«

Для тела я использовал следующее, чтобы найти text а также html части:

$HTML = "";
$TEXT = "";
// extract email body details
foreach($structure as $K => $V){
if(is_array($V)){
foreach($V as $KK => $VV){
if(is_object($VV)){
$bodyHTML = false;
$bodyPLAIN = false;
foreach($VV as $KKK => $VVV){
if(!is_array($VVV)){
if($KKK === 'ctype_secondary'){
if($VVV === 'html') { $bodyHTML = true; }
if($VVV === 'plain') { $bodyPLAIN = true; }
}
if($KKK === 'body'){
if($bodyHTML){
$bodyHTML = false;
$HTML .= quoted_printable_decode($VVV);
}
if($bodyPLAIN){
$bodyPLAIN = false;
$TEXT .= quoted_printable_decode($VVV);
}
}
}
}
}
}
}
}

Наконец, у меня были детали, которые мне были нужны, поэтому я использовал Mail_MIME чтобы получить сообщение. Я делаю свою логику поиска базы данных здесь и нахожу реальное назначение и замаскирован From адрес электронной почты, используя From а также To Я извлек из шапки.

$mime = new Mail_mime(array('eol' => "\r\n"));
$mime->setTXTBody($TEXT);
$mime->setHTMLBody($HTML);

$mail = &Mail::factory('mail');
$hdrs = array(
'From'    => $From,
'Subject' => $Subject
);
$mail->send($To, $mime->headers($hdrs), $mime->get());

Я не знаю, охватит ли это все случаи использования электронных писем, но так как моя система не использует вложения, я в порядке.

Не принимать quoted_printable_decode(), вот как я исправил проблему с = в теле.

Единственная проблема — это задержка почты, которая у меня сейчас, но я справлюсь с этим.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector