исходящие сообщения электронной почты отправляются дважды - PullRequest
0 голосов
/ 27 августа 2018

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

У меня есть вспомогательная функция в codeigniter (так что ее можно сделать доступной для нескольких контроллеров), единственной целью которой является отправка электронного письма пользователю с помощью Mailgun. Код работает следующим образом:

Контроллер:

// the variables that are gathered inside $params are defined earlier in the code. This is just an example

// create a view from the template and store it in a variable
$html_text = $this->load->view('email_template', $params, TRUE);

$payload = array(
'email' => $user_email,
'name' => $user_name,
'html_text' => $html_text,
'plaintext' => $other_variable_with_plaintext,
'other_variable' => $other_variable,
);


$result = mailgun_send($payload);

// handle errors depending if $result becomes true or false

Помощник:

function mailgun_send($payload)
{
$curl_post_data = array(
        'from'    => 'my FROM name <noreply@domain.com>',
        'to'      => $payload['email'],
        'subject' => 'whatever I use as subject',
        'text'    => $payload['plaintext'],
        'html'    => $payload['html_text'],   
    );

    $service_url = 'https://api.mailgun.net/v3/domain.com/messages';
    $curl = curl_init($service_url);
    curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($curl, CURLOPT_USERPWD, "api:OBSCURED_API_KEY"); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 

    $curl_response = curl_exec($curl);
    $response = json_decode($curl_response, true);
    curl_close($curl);

// check mailgun response to handle exceptions later
    if (strpos($response['message'], 'Queued') !== false)
    {
        return true;
    }

    else
    {
        return false;
    }
}

Просмотр (email_template): Обычная ванильная HTML-разметка с парой тегов для включения данных, которые я передаю в $ params. Там нет петель ни в контроллере, ни в представлении, ни во вспомогательном

Когда я запускаю это, электронное письмо отправляется правильно, но получатель получает два электронных письма.

Если я выводю представление на экран вместо переменной, оно отображается правильно.

Если я помещу функцию mailgun_send в тот же контроллер, где живет код, который генерирует электронную почту, почта отправляется только один раз

Я не могу понять, из-за чего электронная почта отправляется дважды. Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 27 августа 2018

Прежде всего, я хотел бы извиниться за то, что опубликовал это, поскольку я понял это для себя.

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

Если бы мод был достаточно любезен, чтобы убить этот вопрос, я был бы признателен

...