2013-06-03 4 views
3

Я не могу отправить многослойную/альтернативу с Swift Mailer (я не нашел какие-либо ссылок, поэтому, возможно, я не могу использовать эту функцию), это мой код:Отправить многослойное/альтернативное письмо с Swift Mailer

$file[1]=html_entity_decode($file[1]); 
//Prepare plain/html body 
foreach($rep as $find => $sost) 
    $file[1]=str_replace($find,$sost,$file[1]); 
//Prepare plain/text body 
$plain=strip_tags(str_replace('&nbsp;',' ',str_replace('<br/>',"\n",$file[1]))); 
$boundary=uniqid('n_=_p'); 
//Prepare mail body     
$body = "--".$boundary."\r\n"; 
$body .= "Content-type: text/plain;\r\ncharset=utf-8\r\nContent-Transfer-Encoding: 7bit\r\n"; 
$body .= $plain; 
$body .= "\r\n--".$boundary."\r\n"; 
$body .= "Content-type: text/html;\r\ncharset=utf-8\r\nContent-Transfer-Encoding: 7bit\r\n"; 
$body .= "<html><body>".$file[1]."</body></html>"; 
$body .= "r\n--".$boundary ."--"; 
//Send Mail 
$message = Swift_Message::newInstance(); 
$message->setFrom(array($stmp[2]=>$stmp[1])); 
$message->setReplyTo(array($stmp[2]=>$stmp[1])); 
$message->setSubject($file[0]); 
$message->setContentType("multipart/alternative"); 
$message->setBody($body); 
$message->setTo($mail); 
$message->setBoundary($boundary); 

if($stmp[0]==0) 
    $transport = Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -t'); 
else if($stmp[0]==1){ 
    if($stmp[5]==0) 
     $transport = Swift_SmtpTransport::newInstance($stmp[2],$stmp[4]); 
    else 
     $transport = Swift_SmtpTransport::newInstance($stmp[2],$stmp[4],'ssl'); 

    if($stmp[6]==1){ 
     $transport->setUsername($stmp[7]); 
     $transport->setPassword($stmp[8]); 
    } 
} 

$mailer = Swift_Mailer::newInstance($transport); 

if(!$mailer->send($message,$failure)) 
    file_put_contents('send_mail_Send_error',print_r($failure,true)); 

Обычно я получаю неприемлемый мессаж или прикрепленный файл с именем «noname».
Может кто-нибудь мне помочь? Благодаря

+2

Вы грубо нарушая SwiftMailer. Нет абсолютно никакой необходимости устанавливать свои собственные заголовки. '-> setBody ('html content here', 'text/html')' и '-> addPart ('plaintext alternative here', 'text/plain');'. –

+0

Я не понял использование '-> addPart', так что спасибо. По причинам спама лучше установить тип содержимого по умолчанию для text/plain и после прикрепления html-части? Спасибо – Razorphyn

+1

Большинство людей используют альтернативный текст для не-html-почтовых программ, поэтому html-лишенный может по-прежнему читать хотя бы содержимое вашей электронной почты. что касается спама, я не мог сказать точно. Я очень сомневаюсь в относительной позиции alt v.s. основной орган имеет значение, но все сводится к индивидуальным фильтрам спама/системам подсчета очков. –

ответ

8

Раствор (из комментария Марка Б):

$message = Swift_Message::newInstance(); 
$message->setFrom($stmp[2]) 
    ->setReplyTo($stmp[2]) 
    ->setSubject($file[0]) 
    ->setContentType("text/plain; charset=UTF-8") 
    ->setBody($plain,'text/plain')     
    ->addPart($file[1],'text/html');