2016-07-15 2 views
0

Я только что открыл Swiftmailer для PHP и, похоже, работает очень хорошо.PHP Swiftmailer: Напишите почтовый контент и другую информацию в БД после каждого отправленного письма

Однако при отправке писем я хотел бы отслеживать, что было отправлено и когда, поэтому я хотел бы выполнить некоторые операции с БД после каждого отправленного письма. Любая идея, как я мог бы это достичь?

У меня есть код для вставки базы данных и т. Д. Но я не знаю, где добавить этот кусок кода. Я не знаю, где у меня есть доступ к отдельным письмам.

Я посылаю это так:

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

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

Так или иначе, я должен был бы получить доступ к отдельной почте.

второй редактировать (потому что слишком широкий):
Вопрос заключается в том, как я могу выполнять индивидуальное действие после каждого сообщения электронной почты, который был послан для того, чтобы войти в содержание отправлено, дату и время для каждого приемника отдельно.

+0

Да, это то, что я думал, спасибо. Но где я должен писать этот код? Где я могу получить доступ к индивидуальным письмам, которые отправляются? Я не могу понять это ... – Mario

+0

@Mario Я не знаю, почему ваш вопрос был опущен, это совершенно законный вопрос. Я не пробовал это сам, но одним из способов могло бы быть использование плагина logger для 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()); 
} 

Надежда, что помогает.

 Смежные вопросы

  • Нет связанных вопросов^_^