mailgun отправить письмо нескольким пользователям - PullRequest
0 голосов
/ 24 января 2020

У меня есть следующий почтовый ящик. php file:

define('MAILGUN_URL', 'https://api.eu.mailgun.net/v3/my_domain');
define('MAILGUN_KEY', 'xxxxxxxxx'); 
function sendmailbymailgun($to,$toname,$mailfromnane,$mailfrom,$subject,$html,$text,$tag,$replyto){
    $array_data = array(
        'from'=> $mailfromnane .'<'.$mailfrom.'>',
        'to'=>$toname.'<'.$to.'>',
        'subject'=>$subject,
        'html'=>$html,
        'text'=>$text,
        'o:tracking'=>'yes',
        'o:tracking-clicks'=>'yes',
        'o:tracking-opens'=>'yes',
        'o:tag'=>$tag,
        'h:Reply-To'=>$replyto
    );
    $session = curl_init(MAILGUN_URL.'/messages');
    curl_setopt($session, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($session, CURLOPT_USERPWD, 'api:'.MAILGUN_KEY);
    curl_setopt($session, CURLOPT_POST, true);
    curl_setopt($session, CURLOPT_POSTFIELDS, $array_data);
    curl_setopt($session, CURLOPT_HEADER, false);
    curl_setopt($session, CURLOPT_ENCODING, 'UTF-8');
    curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($session, CURLOPT_SSL_VERIFYPEER, false);
    $response = curl_exec($session);
    curl_close($session);
    $results = json_decode($response, true);
    return $results;
}

Я пытаюсь отправить уведомление по электронной почте для конечных пользователей со следующим кодом: $eml = переменная адреса электронной почты $usrn = имя пользователя $htm = html текст, сгенерированный из mailtext. php с функцией displaytext $cust_orderid = параметр, не очень важный в этом случае

if ((strlen($eml)>5)&&(isset($eml))&&(!is_null($eml))) {
include('./mailtext.php');
$htm = displaytext($cust_orderid);       
require_once('./mailgun.php');
sendmailbymailgun($eml,$usrn,'NOTIFICATIONS','notify@mydomain.com','NOTIFICATION SUBJECT',$htm,'','','');
          }

все работает нормально, пока я не в $eml поле нескольких адресов электронной почты, разделенных запятой. тогда я получил следующее сообщение об ошибке: параметр «to» не является допустимым адресом. пожалуйста, проверьте документацию

Я проверил документацию, и она говорит, что я могу иметь несколько адресов электронной почты, разделенных запятой. ссылка: документация к mailgun API

некоторые идеи, как решить эту проблему?

заранее спасибо

1 Ответ

0 голосов
/ 24 января 2020

Итак, после предложения @Igor Ili c я изменил почтовый пистолет. php вот так:

<?
define('MAILGUN_URL', 'https://api.eu.mailgun.net/v3/mydomain');
define('MAILGUN_KEY', 'xxxxxxxxxxx'); 
function sendmailbymailgun($to,$toname,$mailfromnane,$mailfrom,$subject,$html,$text,$tag,$replyto){
    $array_data = array(
        'from'=> $mailfromnane .'<'.$mailfrom.'>',
        'to'=> $to,
        'subject'=>$subject,
        'html'=>$html,
        'text'=>$text,
        'o:tracking'=>'yes',
        'o:tracking-clicks'=>'yes',
        'o:tracking-opens'=>'yes',
        'o:tag'=>$tag,
        'h:Reply-To'=>$replyto
    );
    $session = curl_init(MAILGUN_URL.'/messages');
    curl_setopt($session, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($session, CURLOPT_USERPWD, 'api:'.MAILGUN_KEY);
    curl_setopt($session, CURLOPT_POST, true);
    curl_setopt($session, CURLOPT_POSTFIELDS, $array_data);
    curl_setopt($session, CURLOPT_HEADER, false);
    curl_setopt($session, CURLOPT_ENCODING, 'UTF-8');
    curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($session, CURLOPT_SSL_VERIFYPEER, false);
    $response = curl_exec($session);
    curl_close($session);
    $results = json_decode($response, true);
    return $results;
}
?>

единственное изменение:

'to'=> $to,

вместо :

'to'=>$toname.'<'.$to.'>',

теперь я просто игнорирую часть <> отправки электронной почты - это не очень красиво с отображаемым именем / адресом электронной почты в заголовке электронной почты, но мне все равно, это работает, даже когда параметр адреса электронной почты $eml выглядит грязно, как это: 'email1@gmail.com,,,email2@yahoo.com,,email3@office.com,,'

спасибо за отличную идею, проблема решена

...