Я работаю с SYmfony 1.4 и быстрой почтовой программой для отправки большого количества электронных писем через Sendgrid.
Я получаю сообщение об ошибке соответствия RFC для некоторых адресов электронной почты.
Одним из решений может быть удаление условия для выдает ошибку, и это работает, но требует замены ядра. Как бы вы расширили MailboxHeader.php в файлах сайта, а не в ядре symfony. Что-то вроде этого, но не так, потому что это не работает:
class overrideRFCError extends Swift_Mime_Headers_AbstractHeader
{
private function _assertValidAddress($address)
{
if (!preg_match('/^' . $this->getGrammar('addr-spec') . '$/D',
$address))
{
// throw new Swift_RfcComplianceException(
// 'Address in mailbox given [' . $address .
// '] does not comply with RFC 2822, 3.6.2.'
// );
}
}
}
Это также кажется немного тяжелым. Есть ли способ проверить электронную почту на соответствие RFC. Если это так, я мог бы просто удалить его из массива.
ОБНОВЛЕНИЕ 17.07.13
Я смог провести тщательную очистку каждого адреса, чтобы сделать его совместимым с RFC, что решило проблему. Однако я хотел бы знать, существует ли в SwiftMailer функция, которая выполняет эту проверку, а не пишет пользовательскую функцию.
ОБНОВЛЕНИЕ 18.07.13
Вот что я получил на работу. Я старался максимально очистить записи.
Загрузите массив адресов в переменную с именем $emailList
в действиях:
$cleanList = sendGridEmailer::validateEmails($emailList);
в классе sendGridEmailer:
// loop and validate each email address
public static function validateEmails($emailList) {
foreach($emailList as $address => $name) {
try {
$v = new sfValidatorEmail();
$email = $v->clean($address);
} catch (sfValidatorError $e) {
unset($emailList[$address]);
}
}
foreach($emailList as $address => $name) {
$rfcTesting = validateEmailForRFC::is_email($address);
if(!$rfcTesting) {
unset($emailList[$address]);
}
if (!preg_match('/^[a-zA-Z0-9_.-@]/', $address)) {
unset($emailList[$address]);
}
}
// List should be clean
return $emailList;
}
Таким образом, сначала используется sfValidator для удаления начальных плохих адресов. Затем я получил сценарий соответствия RFC здесь и выполнил его в классе validateEmailForRFC, что должно сделать их совместимыми с RFC. .
Наконец, я делаю финальное предварительное сопоставление для всех отставших со странными символами, которые не были обнаружены предыдущими проверками.
Это позволило мне сохранить ядро Symfony нетронутым и подготовить адреса для Swift без ошибок соответствия.