поскольку Umlaute (например, öäü) можно разместить в локальной части адреса электронной почты, мне нужно преобразовать их в ascii, потому что Zend-Mail не может его обработать — он всегда выдает недопустимое исключение заголовка.
Так что есть эта php-функция idn_to_ascii который преобразует доменные имена в формат IDNA ASCII. Проблема в том, что я не уверен, как правильно его использовать.
Давайте возьмем этот адрес электронной почты: testö@domain.com
// doesn't work (unknown error):
idn_to_ascii('testö@domain.com') --> [email protected]
Если я просто конвертирую локальную часть адреса электронной почты, она, кажется, будет работать:
idn_to_ascii('testö') --> [email protected]
Но что, если и доменная часть содержит Umlaute?
например testö@domainö.com
я должен сделать что-то подобное?
idn_to_ascii('testö').'@'.idn_to_ascii('domainö.com')
Также на php-homepage кто-то написал комментарий, что вы должны пропустить высокоуровневую часть домена (а официальная документация неверна):
посмотреть здесь
idn_to_ascii('domainö') // right
idn_to_ascii('domainö.com') // wrong
Я так запутался сейчас: |
У кого-то есть опыт в этом? И хуже всего то, что я даже не могу проверить это, потому что у меня нет адреса электронной почты с Umlaute.
По состоянию на 26 апреля 2017 года testö@domain.com
неверно, потому что местная часть (testö
) адреса электронной почты может использовать любой из следующих символов ASCII:
RFC 5322 Раздел 3.2.3
Попробуйте что-то вроде этого:
function emailToAscii($email) {
$explodedMail = explode('@', $email);
$mailName = idn_to_ascii(array_first($explodedMail));
$mailDomain = last($explodedMail);
$explodedDomain = explode('.', $mailDomain);
$secondLvlDomain = idn_to_ascii(array_first($explodedDomain));
$firstLvlDomain = idn_to_ascii(last($explodedDomain));
return "$mailName@$secondLvlDomain.$firstLvlDomain";
}