Почему некоторые теги привязки неверны?

Я использую 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, и у меня не было проблем с получением ссылок с других сайтов в моем клиенте браузера. (Клиент для браузера предоставляется как часть учетной записи веб-мастера.)

Есть идеи?

ОБНОВЛЕНИЕ: Вот код, который генерирует ссылку. Пробовал всевозможные комбинации, включая EOT, одинарные кавычки, двойные кавычки... Тот же результат...

$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);

person DatsunBing    schedule 27.10.2011    source источник
comment
Можете ли вы показать код, который генерирует этот якорь?   -  person Phil    schedule 27.10.2011


Ответы (1)


С помощью 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, вы можете быть уверены, что клиент щелкнет правильную ссылку.

person Emilio A. L.    schedule 27.10.2011