2012-01-09 14 views
5

Obecnie używam skryptu, który używa pliku file_get_contents do pobrania zawartości pliku php, a następnie wysyła go w wiadomości e-mail do listy klientów. Chciałbym zmienić skrypt, aby umożliwić powrót do zwykłego tekstu, aby zmniejszyć ryzyko, że zostanie oznaczony jako spam.Wysyłanie biuletynów HTML z zastępczym zwykłym tekstem

Jest to skrypt mam w tej chwili:

function sendit($to,$subject,$body) 
{ 
$headers = "To: <{$to}>\n". 
        "From: Test Newsletter Admin <[email protected]>\n". 
        "Reply-To: Test Newsletter Admin <[email protected]>\n". 
        "MIME-Version: 1.0\n". 
        "Content-Type: text/html; charset=ISO-8859-1\n"; 

    $mail_sent = @mail($to, $subject, $body, $headers); 
    return $mail_sent; 
} 
$content = file_get_contents('attach/newsletter.php'); 
//require_once('../../func.php'); 
set_time_limit(0); 
date_default_timezone_set('Europe/London'); 

$log = fopen('send'.date('dmY',time()).'.log','wb'); 

//$array = file('NonCustClean.txt'); 
$array = file('devaddresses.txt'); 
// Delay In Seconds between emails (must be INT) 
$delay = 10; 
$count = count($array); 

$end = time()+ ($delay*$count); 

echo "Start Time: ".date('d/m/Y H:i:s',time()).'<br />'; 
echo "Estimated End Time: ".date('d/m/Y H:i:s',$end).'<br />'; 
echo "(".dateDiff(time(),$end).")<br />"; 

foreach ($array as $email) 
{ 

$status = (sendit(trim($email), 'Test Newsletter',$content))?'Sent':'failed'; 
fwrite($log,date('[d/m/Y H:i:s]',time()).' Email '.$status.' to '.trim($email)."\n"); 
echo date('[d/m/Y H:i:s]',time()).' Email '.$status.' to '.trim($email)."</br>"; 
flush(); 
    sleep(10); 
} 

Newsletter.php zawiera tylko podstawowy kod HTML/CSS.

Czy ktoś mógłby doradzić, w jaki sposób mogę zmienić ten skrypt, aby towarzyszył mu zwykły tekst zastępczy?

Dzięki za pomoc.

+0

Czy myślałeś o użyciu biblioteki takich jak [Swiftmailer] (http://swiftmailer.org/)? Ta [odpowiedź] (http://stackoverflow.com/a/29345590/987864) opisuje, jak łatwo jest wysyłać wiadomości HTML i zwykły tekst. – Daan

Odpowiedz

5

Co szukasz jest znany jako wieloczęściowy e-mail. To ciało zawiera zarówno HTML, jak i tekst, ograniczony przez tak zwaną "granicę". Klient poczty e-mail sam ustali się, czy wyświetli wersję HTML lub tekstową poczty, w oparciu o jej możliwości i preferencje użytkownika.

Przykładem na to, jak można skonfigurować (source):

$notice_text = "This is a multi-part message in MIME format."; 
$plain_text = "This is a plain text email.\r\nIt is very cool."; 
$html_text = "<html><body>This is an <b style='color:purple'>HTML</b>" . 
      "text email.\r\nIt is very cool.</body></html>"; 

$semi_rand = md5(time()); 
$mime_boundary = "==MULTIPART_BOUNDARY_$semi_rand"; 
$mime_boundary_header = chr(34) . $mime_boundary . chr(34); 

$to = "Me <[email protected]>"; 
$bcc = "You <[email protected]>, Them <[email protected]>"; 
$from = "Me.com <[email protected]>"; 
$subject = "My Email"; 

$body = "$notice_text 

--$mime_boundary 
Content-Type: text/plain; charset=us-ascii 
Content-Transfer-Encoding: 7bit 

$plain_text 

--$mime_boundary 
Content-Type: text/html; charset=us-ascii 
Content-Transfer-Encoding: 7bit 

$html_text 

--$mime_boundary--"; 

if (@mail($to, $subject, $body, 
    "From: " . $from . "\n" . 
    "bcc: " . $bcc . "\n" . 
    "MIME-Version: 1.0\n" . 
    "Content-Type: multipart/alternative;\n" . 
    "  boundary=" . $mime_boundary_header)) 
    echo "Email sent successfully."; 
else 
    echo "Email NOT sent successfully!"; 
+0

Próbowałem tego, a wiadomość e-mail trafiła do folderu spamu. http://www.mail-tester.com/ mówi: "Wiadomość to od 10% do 20% obfuskacji HTML". Ponadto mówi, że nie wolno mi wysyłać wiadomości z podanego adresu e-mail. – erdomester

0

Należy zmodyfikować

Content-Type: text/html; charset=ISO-8859-1\n 

Dalsze informacje o, proszę sprawdzić site

Powiązane problemy