2011-10-27 2 views
0

Я использую Zend_Mail для отправки текстовых сообщений через SMTP. В тестовой среде я заметил, что при сборе моих писем через клиентский браузер URL-адреса были преобразованы в гиперссылки, но граница между ссылкой и обычным текстом была составлена ​​неправильно.Почему некоторые якорные тэги неверны?

Например, в приведенном ниже фрагменте эл. Почты вы можете видеть, что я отправил регистрационное письмо пользователю. Он включает параметры для «id» и «code». Вы увидите, что в этом случае клиент браузера решил, что «id» является частью гиперссылки, но «код» - нет.

please follow this link <a href="http://mydomain.com/user/validate/id/18">http://mydomain.com/user/validate/id/18</a>/code/1a0d917c1512c700f7237ae1f3727e47 If you did not... 

Иногда «граница» рисуется в произвольном месте - например, на полпути через поле кода!

Когда вы собираете электронную почту через клиента, например Outlook, проблема не возникает.

Предположительно это какая-то несовместимость наборов символов между моей средой PHP и моим клиентом браузера. Сказав это, я использую стандартную версию PHP для установки на складе, и у меня не было проблем с получением ссылок с других сайтов в моем браузере. (Клиент браузера предоставляется как часть учетной записи веб-мастеров.)

Любые идеи?

UPDATE: Вот код, который генерирует ссылку. Пробовал все виды комбинаций, включая СРВ, одинарные кавычки, двойные кавычки, ... тот же результат ...

$id   = $options['id']; 
$code  = $options['validation']; 
$link  = "http://mydomain.com/user/validate/id/" . $id . "/code/" . $code; 

$body = 'Thanks for registering ... please follow this 
link ' . $link . ' If you did not request ....please ignore it.'; 

$this->setBodyText($body); 
+0

Можете ли вы показать код, который генерирует этот якорь? – Phil

ответ

0

С setBodyText() установить текст только часть письма: когда вы пишете на равнине текст по электронной почте ссылку вы только пишете некоторые символы без особого смысла; клиент, который получает почту, чем понимает, является ли это ссылкой и как ее отображать. Однако этот процесс не контролируется (он зависит от клиента и зависит от клиента, которого он имеет).

Лучшее решение на мой взгляд является также настроить HTML часть объекта Zend_Mail вызывающей

$yourMailObject->setBodyHtml($htmlString); 

Делая это вы явно сообщить почтовому клиенту, как сделать ссылку.

Очевидно, что вам нужно работать немного больше, но поскольку вы хотите, чтобы клиент отображал свойство HTML как тег A, лучший способ - передать ему правильный HTML.

Резюмируя, рабочий процесс выглядит следующим образом:

  1. определить связь и положить его (скажем) в $link переменной
  2. подготовить текст письма в простом тексте: $bodyText = "Something... click here: $link ...";
  3. подготовить тело письма в формате HTML: $bodyHtml = "<body><p>Click the link below</p><p><a href='$link'>$link</a></p><p>Or copy and paste in your browser the url:<br/><pre>$link</pre></p></body>";
  4. вызов как методы объекта почты: $yourMailObject->setBodyText($bodyText)->setBodyHtml($bodyHtml);

Затем вы отправляете почту как обычно. Вы можете дополнительно настроить html более сложным способом, добавив inline css и так далее.Вы также можете отформатировать его как текстовую почту (с моноширинным шрифтом), но поскольку вы передали правильный HTML, вы можете быть уверены, что клиент нажмет соответствующую ссылку.