2016-07-15 4 views
0

Swiftmailer for PHP를 방금 발견했으며 매우 잘 작동하는 것으로 보입니다.PHP Swiftmailer : 메일을 보낼 때마다 메일 내용 및 기타 정보를 DB에 작성하십시오.

그러나 메일을 보내는 중에 보낸 메시지를 추적하고 싶습니다. 전송 된 모든 메일이 끝나면 일부 DB 작업을 수행하고 싶습니다. 내가 어떻게이 일을 성취 할 수 있었는지 아는가?

데이터베이스 삽입 코드 등이 있습니다.하지만이 코드 조각을 추가 할 위치는 어디인지 알 수 없습니다. 개별 메일에 대한 액세스 권한이 어디에 있는지 알 수 없습니다.

내가 이렇게 보내 :

foreach($email as $id => $to) { 
     $message->addTo($to); 
} 

// Send the message 
$result = $mailer->send($message); 

어떻게 든, 나는 개별 메일에 액세스해야합니다.

초 편집 (너무 광범위하기 때문에) :
문제는 내가 별도로 각 수신기에 대한 콘텐츠 전송, 날짜와 시간을 기록하기 위해 전송 된 각 이메일 후 개별 작업을 수행 할 수있는 방법입니다.

+0

네, 저도 그렇게 생각했습니다. 감사합니다. 하지만이 코드는 어디에 써야합니까? 어디로 보내지는 개별 메일에 대한 액세스 권한이 있습니까? 나는 이것을 이해할 수 없다 ... – Mario

+0

@Mario 나는 왜 당신의 질문이 downvoted되었는지, 그것은 매우 정당한 질문이다. 나는이 방법을 사용하지 않았지만 한 가지 방법은 swiftmail 용 로거 플러그인을 사용하고 데이터베이스에이를 기록하는 사용자 정의 로거를 만드는 것입니다. 다시 한 번, 나 자신을 시도하지 않았습니다. http://swiftmailer.org/docs/plugins.html#logger-plugin – Oli

+0

지원에 대한 @Oli에 감사드립니다. 로거 플러그인은 아마도 좋은 생각 일 수 있지만 아직 내 자신의 로거 작성법을 알지 못합니다 .... 어쨌든 많이 고마워. – Mario

답변

1

이렇게해야합니다. 코드에서

foreach($email as $id => $to) { 
    Update Database here 
    $message->addTo($to); 
    $mailSending(); 
} 

, 나는 모든 이메일 주소는 하나의 이메일에 추가 확신하고 루프에서 이메일을 하나의 이메일에 하나의 이메일 주소를 추가하고 생성 할 필요가있다.

1

Naveed의 훌륭한 제안 외에도 완벽하게 작동 할 수있는 또 다른 솔루션이 있으며 이것이 메시지 로거입니다.

모든 메시지를 메모리에 저장하므로 보내는 메시지의 수에 따라 잘 맞지 않을 수도 있습니다.

그래서 당신은 당신의 우편물에 로거를 추가
$mailer = Swift_Mailer::newInstance(
    Swift_SmtpTransport::newInstance('localhost', 25) 
); 

$logger = new Swift_Plugins_MessageLogger(); 
$mailer->registerPlugin($logger); 

그런 다음 당신은 당신의 메시지를 보내, 이들은 MessageLogger 수 캡처됩니다. 도움이

$result = $mailer->send($message); 

/* @var Swift_Message $msg */ 
foreach($logger->getMessages() as $msg) { 
    var_dump($msg->getTo()); 
    var_dump($msg->getFrom()); 
    var_dump($msg->getSubject()); 
    var_dump($msg->getBody()); 
    var_dump($msg->getDate()); 
} 

희망 :

는 후에 당신은 당신이 삽입 원하는 정보 또는 무엇을 가지고 그들을 통해 반복하고 얻을 수 있습니다.