Pracuję z SYmfony 1.4 i SWIFT Mailer, aby wysłać dużą liczbę wiadomości e-mail za pośrednictwem Sendgrid.Jak przedłużyć MailboxHeader.php w Swift Mailer lub sprawdzić poprawność wiadomości e-mail
Otrzymuję błąd zgodności RFC dla niektórych adresów e-mail.
Jednym z rozwiązań jest remove the condition to throw the error i działa, ale wymaga zmiany rdzenia. Jak rozszerzyć MailboxHeader.php w plikach serwisu, a nie rdzeń symfony. Coś takiego, ale nie dlatego, że to nie działa:
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.'
// );
}
}
}
Wydaje się to również trochę ciężkie z przekazaniem. Czy istnieje sposób sprawdzenia poprawności wiadomości e-mail pod kątem zgodności z RFC. Jeśli tak, mógłbym po prostu usunąć to z tablicy.
AKTUALIZACJA 07/17/13
udało mi się umieścić gruntowne czyszczenie na każdy adres, aby to zgodne z RFC, która rozwiązuje ten problem. Chciałbym jednak wiedzieć, czy w SwiftMailer istnieje funkcja, która wykonuje tę kontrolę, zamiast pisania niestandardowej funkcji.
AKTUALIZACJA 07/18/13
Oto co mam do pracy. Starałem się w jak największym stopniu zdezynfekować zgłoszenia.
obciążenia tablicą adresów w zmiennej o nazwie $emailList
w działaniach:
$cleanList = sendGridEmailer::validateEmails($emailList);
w sendGridEmailer Klasa:
// 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('/^[[email protected]]/', $address)) {
unset($emailList[$address]);
}
}
// List should be clean
return $emailList;
}
Więc ten pierwszy wykorzystuje sfValidator wykopać początkowa złe adresy. Następnie mam skrypt zgodności RFC here i wykonać go w klasie validateEmailForRFC, która powinna być zgodna z RFC.
Ostatni, robię ostateczny pregmatch dla wszelkich maruderów z dziwnymi znakami, których poprzednie kontrole nie złapały.
Pozwoliło to na utrzymanie rdzenia Symfony i przygotowanie adresów dla Swift bez błędów zgodności.
Czy masz jakieś dane na temat adresów, które powodują błąd? Uniknięcie błędu przez przesłonięcie może być obejściem, ale nie rozwiązaniem. –
W rzeczywistości nie ma szansy na uniknięcie tego. Kontrola pod kątem złych adresów jest zgodna z RFC, chociaż dostawcy mogą to zaakceptować. Reguły sprawdzania są zakodowane w Swift. Zmień rdzeń, nie wyrzucaj błędu, ale napisz do pliku dziennika adres. Możesz więc sprawdzić, czy adres jest błędny, czy to tylko ścisłe sprawdzanie. –
Wolałbym nie usuwać sprawdzania błędów. Myślę, że istnieje funkcja SwiftMailer, która sprawdzi poprawność RFC. Czy to istnieje? –