Отправка электронного письма в формате HTML из документа php - PullRequest
0 голосов
/ 10 сентября 2011

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

Я создал HTMLписьма (со встроенным CSS, это буквально 1 страница), и это выглядит так: enter image description here

Итак, я взял этот код и написал отправку электронной почты в php:

ini_set("sendmail_from", "emailer@benjaminpotter.org");

    $to = $email;
    $subject = "Ben Potter Web Design - Newsletter Form Submission";   

    $emailthing = '    
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Form Submission - Newsletter Update</title>
</head>
<style type="text/css">
body {
    background-color:#e8faff;   
}

p {
    font-size:15px;
    font-family:Georgia, "Times New Roman", Times, serif;
    color:#141414;
    font-style:italic;
}

#mainbox{
    background-image:url(http://www.benjaminpotter.org/Images/emailtotheuser.jpg);
    width:345px;
    height:404px;   
    margin-left:auto;
    margin-right:auto;
    display:block;
    margin-top:50px;
}

#mainbox #textholder{
    width:279px;
    height:300px;
    display:block;
    position:absolute;
    margin-top:80px;
    margin-left:30px;   
}

#special{
    color:#72C0EF;
    text-align:center !important;
    font-style:normal;
}
</style>
<body>
<div id="mainbox">
<div id="textholder">
<p>
Thanks for signing up!<br />
I currently have you under the email:<br />
<span id="special">' . $email . '</span>
<br />
<br />
You will be receiving tri-monthly / <br />
quarterly emails from me, updating you<br />
on my latest works.<br />
<br />
Thank you for your intrest in <strong>Ben Potter
Web Design</strong>, you will receive the first newsletter soon.<br />
<br />
<br />
Yours Sincerely,
<br />
<strong>Ben Potter</strong>
</p>
</div>
</div>
</body>
</html>';  

$Rconfucious = "MIME-Version: 1.0\r\n";   
$Rconfucious .= "Content-type: text/html; charset=iso-8859-1\r\n";        
$Rconfucious .= 'From: Ben Potter Web Design 2011 <emailer@benjaminpotter.org>' . "\r\n";

@mail($to, $subject, $emailthing, $Rconfucious); 

Но проблема в том, что это происходит так:

enter image description here

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

Спасибо запомощь!

Ответы [ 3 ]

4 голосов
/ 11 сентября 2011

Ваше письмо правильно отправляется в формате HTML.Однако поддержка CSS / HTML в почтовых клиентах схожа с ситуацией, которая была у нас в 1998 году.

Например, Gmail не поддерживает теги <style>, поэтому ваша электронная почта отображается так, как она есть.Я предлагаю вам взглянуть на следующую диаграмму , чтобы увидеть, что поддерживает каждый почтовый клиент, и соответствующим образом настроить ваш HTML-шаблон.

Итак, по сути, ваше письмо должно быть написано кактакие:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Form Submission - Newsletter Update</title>
</head>
<body bgcolor="#72c0ef">
<div style="background-image:url(http://www.benjaminpotter.org/Images/emailtotheuser.jpg); width:345px; height:404px; margin-left:auto; margin-right:auto; display:block; margin-top:50px;">
<div style="width:279px; height:300px; display:block; position:absolute; margin-top:80px; margin-left:30px;">
<p style="font-size:15px; font-family:Georgia, \'Times New Roman\', Times, serif; color:#141414; font-style:italic;">
Thanks for signing up!<br />
I currently have you under the email:<br />
<span class="color:#72C0EF; text-align:center !important; font-style:normal;">' . $email . '</span>
<br />
<br />
You will be receiving tri-monthly / <br />
quarterly emails from me, updating you<br />
on my latest works.<br />
<br />
Thank you for your intrest in <strong>Ben Potter
Web Design</strong>, you will receive the first newsletter soon.<br />
<br />
<br />
Yours Sincerely,
<br />
<strong>Ben Potter</strong>
</p>
</div>
</div>
</body>
</html>
1 голос
/ 11 сентября 2011

Я бы порекомендовал использовать библиотеку электронной почты.SwiftMailer существует уже давно, и он очень хорошо функционирует и надежен.

Документация по созданию html-сообщений находится здесь: http://swiftmailer.org/docs/messages.html

Например, это создает сообщение электронной почты, которое поддерживает оба HTMLи обычный текст для устаревших клиентов:

//Pass it as a parameter when you create the message
$message = Swift_Message::newInstance('Subject here', 'My amazing body');

//Or set it after like this
$message->setBody('My <em>amazing</em> body', 'text/html');

//Add alternative parts with addPart()
$message->addPart('My amazing body in plain text', 'text/plain');

Что касается писем, идущих в спам, я бы порекомендовал прочитать Так что вы хотели бы отправить несколько писем (через код) .Ключ заключается в том, чтобы либо правильно настроить сервер для отправки электронной почты, либо использовать стороннего поставщика, такого как postmarkapp или sendgrid

Надеюсь, что это поможет.

ОБНОВЛЕНИЕ:

Выше было задумано как предложение по улучшению обработки электронной почты в вашем коде.Возможно, это не касалось того факта, что Gmail не поддерживает теги, но я рекомендую использовать библиотеку электронной почты.

0 голосов
/ 11 сентября 2011

HTML в письмах отправляется в виде другого файла.Вы должны передать обычную текстовую электронную почту (для тех, кто не использует необычные почтовые клиенты с html viewer) и вам нужен дополнительный файл с mime-типом text / html, использующий base64 и некоторые правила построения электронной почты.Чтобы посмотреть, как это выглядит (в gmail), откройте любое html-сообщение, а затем найдите функцию orginal (в меню «v» рядом с кнопкой ответа над сообщением).

В простейшем случае (без открытого текста) вы можете попробовать это: mail ($ to, $ subject, $ message, "From: $ from \ nContent-Type: text / html; charset = iso-8859-1");

Для прикрепления открытого текста для удобства некоторых читателейили прикрепление файлов (и изображений) смотрите здесь: http://www.php.net/manual/en/function.mail.php#105661 (комментарий "Отправить сообщение с несколькими вложениями").

Существует пример объединения открытого текста и HTML: http://www.php.net/manual/en/function.mail.php#83491 (комментарийс датой «28 мая 2008 г. 01:55»

...