Mailgun发送带附件的邮件

时间:2017-05-14 12:30:35

标签: php curl attachment mailgun

我正在尝试使用mailgun发送带附件的邮件。 邮件本身很好,但它缺少附件。 同样在mailgun日志中它显示正常,但附件数组是空的。

我用example.com替换了我的凭据。 该文件放在子目录中,可读。

$filename = 'directory/example.pdf';
$parameters = array('from' => 'Example <example@mail.example.com>',
                    'to' => 'example@example.com',
                    'subject' => 'Subject',
                    'text' => 'This is just a test.',
                    'attachment[1]' => '@' . $filename);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.mailgun.net/v3/mail.example.com/messages');
curl_setopt($ch, CURLOPT_USERPWD, 'api:key-ThisIsJustARandomString');

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);

我没有收到错误,这是$response

string(103) "{
    "id": "<20170514122638.8820.55203.4543B111@mail.example.com>",
    "message": "Queued. Thank you."
}"

在mailgun日志中没有列出附件:

"message": {
    "headers": {
        "to": "example@example.com",
        "message-id": "20170514122638.8820.55203.4543B111@mail.example.com",
        "from": "Example <example@mail.example.com>",
        "subject": "Subject"
    },
    "attachments": [],
    "size": 349
},

根据所有文档,我发现这将是正确的解决方案,但它不起作用。

提前感谢所有回复。

3 个答案:

答案 0 :(得分:7)

将您的第一个代码更改为:

$filename = 'directory/example.pdf';
$parameters = array('from' => 'Example <example@mail.example.com>',
                'to' => 'example@example.com',
                'subject' => 'Subject',
                'text' => 'This is just a test.',
                'attachment[1]' => curl_file_create($filename, 'application/pdf', 'example.pdf'));

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.mailgun.net/v3/mail.example.com/messages');
curl_setopt($ch, CURLOPT_USERPWD, 'api:key-ThisIsJustARandomString');

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);

我将'@'.$filename更改为curl_file_create($filename, 'application/pdf', 'example.pdf')

请参阅文档curl_file_create并查看PHP的说明&lt; 5.5。

答案 1 :(得分:2)

或使用API​​ https://documentation.mailgun.com/en/latest/api-sending.html#examples

一旦设置了域和参数,您就可以使用$ result = $ mgClient-> messages()-> send($ domain,$ params);

答案 2 :(得分:0)

这对我有用。

<?php
 $path = $filename;
 define('MAILGUN_URL', 'https://api.mailgun.net/v3/domainname'); 
 define('MAILGUN_KEY', 'private api key from mail gun');
 **function sendmailbymailgun**($to,$toname,$mailfromname,$mailfrom,$subject,
  $html,$text,$tag,$replyto, $path){

$array_data = array(
'from'=> $mailfromname .'<'.$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,
 'attachment[0]' =>  curl_file_create(__dir__."\\".$path, 'application/pdf', $path),
 'attachment[1]' =>  curl_file_create(__dir__."\\".$path, 'application/pdf', "example.pdf")
);
$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_HTTPHEADER, array('Content-Type: multipart/form-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;
}

  //: call the function
  $res = sendmailbymailgun("example@yahoo.com","Recipeint Name", "Sender Name", "sender@example.com","Email subject","Email body. find two attachment","","tags", "no-reply@example.com", $path);
  echo "<pre>".print_r($res, true)."</pre>";  


?>