Попытка отправки электронной почты через другой сервис SMTP при добавлении вложений - PullRequest
0 голосов
/ 23 января 2020

У меня возникла проблема при использовании PEAR с

$smtp = Mail::factory ('smtp', $params);

для перенаправления smtp через пользовательский почтовый сервер и добавления вложения (на самом деле несколько), что представляется невозможным.

$HeadersCO = array (
                'From' => $From,
                'Return-path' => $From,
                'To' => $Email,
                'Subject' => $Subject2C,
                'Reply-To' => $From,
                'Date' => date("r"),
                'Errors-To' => $Admin_Email,
                'Return-Path' => $Company,
                'X-Mailer' => "PHP v".phpversion(),
                'X-Domain' => $SERVER_NAME,
                'X-Page' => $PHP_SELF,
                'Content-type' => $contentUTF8,
                'MIME-Version' => $mime);

            $mimeCO = new Mail_mime(array('eol' => $crlf));

            $mimeCO->setTXTBody($textcontent);  //Text version
            $mimeCO->setHTMLBody($message);  //HTML version

            $imgNo=0;   
            while ($imgNo < $totalImages) {     
                $imageAtt = $imgarr[$imgNo];
                $mimeCO->addAttachment($imageAtt, 'image/jpg');
                $imgNo++;
            }   

            $bodyCO = $mimeCO->get();
            $hdrsCO = $mimeCO->headers($HeadersCO);

            $mail2C = $smtp->send($email, $hdrsCO, $bodyCO);

Это отправит электронное письмо на правильный почтовый сервер со встроенными изображениями, но без вложенных изображений. $mimeCO->addAttachment($imageAtt, 'image/jpg');, похоже, вообще не работает, даже если я создаю только одно вложение с указанным c файлом.

Я где-то читал, что при использовании PEAR mime & mail вы можете перенаправлять свои электронные письма в другую службу SMTP или добавлять вложения, но не в оба. Это правильно? Если это так, то это объясняет, почему у меня проблема с отправкой вложений с помощью $smtp->send в PEAR.

1 Ответ

0 голосов
/ 10 февраля 2020

Мне удалось решить мою дилемму об ограничениях PEAR [отправка через внешний SMTP-сервер и добавление вложений] с помощью PHPMailer.

Я установил PHPMailer для открытия внешнего SMTP-канала, отправки до 4-х различных электронных писем, а затем закрытия сеанса SMTP, выбирая, к каким электронным письмам были прикреплены файлы, встраивались изображения, различные темы, различные тела, отвечали на, от-к и добавить адреса.

В целом мой код сократился с 1400 строк до 800, и я очень доволен гибкостью этого кода.

В этом суть нового кода PHPMailer:

$mail = new PHPMailer(true);     // Passing `true` enables exceptions

$mail->SMTPDebug = false;        //3 Enables SMTP debugging, 0 turns off 
$mail->isSMTP();                 //Set PHPMailer to use SMTP.  
$mail->SMTPKeepAlive = true;     //Keep SMTP alive            
$mail->Host = "smtp.emailserver.com";//Specify external SMTP servers  
$mail->SMTPAuth = true;                          
$mail->Username = "username@mail.domain.com";               
$mail->Password = "mypass";                           
$mail->SMTPSecure = "tls";       // Enable encryption, 'ssl'                        
$mail->Port = 587;               //Set TCP port to connect to

//Recipients
$mail->addReplyTo('company@mail.domain.com', 'Company Name');
$mail->setFrom('company@mail.domain.com', 'Company Name');  
//Add recipeints
$mail->addAddress($Email, "'".$FirstName." ".$LastName."'");
//CC and BCC
$mail->addBCC('me@mail.domain.com', "WebMaster Backup");
$mail->addCC('company@domain.com', "CC Backup");

//Attachments from array using PHP
$imgNo=0;   
while ($imgNo < $totalImages) { 
    $imageAtt = $imgArray[$imgNo];
    $imageNam = $imgName[$imgNo];
    $mail->addAttachment($imageAtt, $imageNam);
    $imgNo++;
}       

//Content
$mail->Subject = $Subject2C;
$mail->Body    = $message;
$mail->AltBody = $textcontent;
$mail->isHTML(true); //Set email to be sent as HTML, false for Text only

/* =============Sending Customer Email====#1====== */
if($mail->send()) {  


/* ==============Sending Company Email=====#2====== */
$mail->clearReplyTos();
$mail->clearAllRecipients(); // clear all Address/CC/BCC
$mail->clearAttachments(); 
$mail->addReplyTo($Email, "'".$FirstName." ".$LastName."'");
$mail->setFrom($Email, "'".$FirstName." ".$LastName."'");  
$mail->addAddress('company@mail.domain.com', 'Email Sent');
$mail->addBCC('me@mail.domain.com', "WebMaster Backup");
$mail->Subject = $Subject2Company;
$mail->Body    = $MessageEmail;
$mail->AltBody = $textcontent; 
$mail->AltBody = $textcontent;
$mail->isHTML(true);

$mail->send();

/* ==============Subscribing Email=========#3====== */
$mail->clearAttachments(); 
$mail->clearReplyTos();
$mail->clearAllRecipients();
$mail->clearCCs();
$mail->addReplyTo('company@mail.domain.com', 'Company Name');
$mail->setFrom('company@mail.domain.com', 'Company Name');      
$mail->addAddress($listmail, 'Subscribe List');     
$mail->addBCC('me@mail.domain.com', "WebMaster Backup");        
$mail->Subject = $subject;
$mail->Body    = $SMessage;
$mail->AltBody = $body;
$mail->isHTML(false); 
$mail->send();

$mail->SmtpClose(); //closing SMTP session
...