Почему некоторые теги привязки неверны? - PullRequest
0 голосов
/ 27 октября 2011

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

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

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

1 Ответ

0 голосов
/ 28 октября 2011

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

...