В письме HTML, отправленном из скрипта PHP, отсутствуют кавычки и письмо после пропущенной цитаты - PullRequest
1 голос
/ 23 января 2012

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

  $message= '
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      <html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <title>Solicitud de registro enviado desde I-Home.es</title>
  <style type="text/css">
  #introduccion {
      font-size: 24px;
  }
  td:first-child {
      background-color: #FC9;
      text-align: right;
      width: 30%;
      padding-right: 5px;
  }
  td:nth-child(2) {
      background-color: #FDA;
      text-align: right;
      width: 70%;
      padding-right: 5px;
  }
  </style>
  </head>

  <body>
  <div id="introduccion">
  '. $subject . '<span> </span> 
  </div>
  <table width="500" border="0">
    <tr>
      <td>Nombre</td>
      <td>'. $name. ' &nbsp;</td>

      [... more here ...]

      </body>
  </html>
      ' ;

Это фрагмент фактически полученного электронного письма, обратите внимание на отсутствующие кавычки и буквы в «id» и в «with»:

  <div id=ntroduccion'>
  I-Home: Solicitud de registro para Amelia<span> </span> 
  </div>
  <table width=00' border='>

Ответы [ 4 ]

1 голос
/ 23 января 2012

Вы должны добавить обратную косую черту ко всем кавычкам в переменной PHP. Так что \ "всегда должно работать.

<?php
$message= "
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">
  <html>
<head>
<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />
<title>Solicitud de registro enviado desde I-Home.es</title>
<style type=\"text/css\">
#introduccion {
  font-size: 24px;
}
td:first-child {
  background-color: #FC9;
  text-align: right;
  width: 30%;
  padding-right: 5px;
}
td:nth-child(2) {
  background-color: #FDA;
  text-align: right;
  width: 70%;
  padding-right: 5px;
}
</style>
</head>

<body>
<div id=\"introduccion\">
'. $subject . '<span> </span> 
</div>
<table width=\"500\" border=\"0\">
<tr>
  <td>Nombre</td>
  <td>'. $name. ' &nbsp;</td>

  [... more here ...]

  </body>
</html>
  " ;
  echo $message;
  ?>
0 голосов
/ 04 сентября 2013

Исключение символов '=' и некоторых других следующих сразу подозрительно выглядит так, как будто у вас MIME Content-Transfer-Encoding установлено значение quoted-printable.

Измените заголовки сообщений, чтобы использовать другую кодировку передачи, чтобы избежать неправильного сопоставления символов '=', или корректно экранируйте их в исходном сообщении.

Возможно, ваш веб-почтовый клиент менее ревностно относится к соответствию стандартам, чем Outlook, и, следовательно, работает больше, чем вы ожидаете.

0 голосов
/ 24 января 2012

Поскольку я был уверен, что проблема заключалась не в установке переменной php (как это работает для Eray), а в отправке, транспортировке или получении электронной почты, я провел тест.Вместо того, чтобы отправлять электронную почту на мою учетную запись Outlook, я отправлял ее на свою веб-учетную запись Yahoo и был удивлен, увидев, что она отображается намного лучше, а цитаты на самом деле есть.Таким образом, все указывает на то, что проблема в том, что MS-Outlook удаляет кавычки .Должен быть способ сделать это правильным для Outlook (и электронной почты в Интернете), поскольку я получил хорошо отформатированную электронную почту HTML в Outlook.Я думал об использовании библиотеки, такой как Zend_Mail, упомянутой выше, но я чувствую, что добавляю дополнительный уровень сложности, который в конце будет столь же сложным, как и то, что я пытаюсь сам, так или иначе, я должен сказать Zand_Mail, что я отправляю HTML, а не простотекст.

Последнее замечание: в электронном письме, полученном на yahoo.com, отсутствует "(2)" в CSS, поэтому фоновый цвет и выравнивание не являются правильными.

td:nth-child(2) {
  background-color: #FDA;
  text-align: right;
  width: 70%;
  padding-right: 5px;
}

Спасибо всем телам за помощь.

ПРИМЕЧАНИЕ. Синтаксис HEREDOC у меня не сработал.Я использовал этот синтаксис (не три, а два <) для сценариев Unix, но может не работать для PHP.Я решил попробовать Zend_Mail. </p>

UNDATE

Я успешно использовал библиотеки Zend_Framework Mail и Mime, но с некоторыми трудностями, не из-за Zend, а из-за моего сервера веб-хостинга.провайдер отключил include_once и на стороне сервера include, и мне было трудно узнать, что происходит.Zend_Mail отправляет электронное письмо и цитаты сохраняются.

0 голосов
/ 23 января 2012

Вы можете использовать HEREDOC SYNTAX

Я пробовал это и работает .Не забудьте установить $ name, $ и т. Д.

$message = <<<MAIL
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Solicitud de registro enviado desde I-Home.es</title>
<style type="text/css">
#introduccion {
font-size: 24px;
}
td:first-child {
background-color: #FC9;
text-align: right;
width: 30%;
padding-right: 5px;
}
td:nth-child(2) {
background-color: #FDA;
text-align: right;
width: 70%;
padding-right: 5px;
}
</style>
</head>

<body>
<div id="introduccion">
'. $subject . '<span> </span> 
</div>
<table width="500" border="0">
<tr>
<td>Nombre</td>
<td>'. $name. ' &nbsp;</td>

[... more here ...]

</body>
</html>
MAIL;

    // sending mail
    mail($to, $subject, $message);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...