Mailgun Отправлено письмо С приложением

Я столкнулся с проблемой при отправке почты с помощью mailgun. Если кто-то сделал это, ответьте. Это мой код …

$mg_api = 'key-3ax6xnjp29jd6fds4gc373sgvjxteol0'; $mg_version = 'api.mailgun.net/v2/'; $mg_domain = "samples.mailgun.org"; $mg_from_email = "info@samples.com"; $mg_reply_to_email = "info@samples.org"; $mg_message_url = "https://".$mg_version.$mg_domain."/messages"; $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt ($ch, CURLOPT_MAXREDIRS, 3); curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, false); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_VERBOSE, 0); curl_setopt ($ch, CURLOPT_HEADER, 1); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_USERPWD, 'api:' . $mg_api); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, true); //curl_setopt($curl, CURLOPT_POSTFIELDS, $params); curl_setopt($ch, CURLOPT_HEADER, false); //curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($ch, CURLOPT_URL, $mg_message_url); curl_setopt($ch, CURLOPT_POSTFIELDS, array( 'from' => 'aaaa <' . 'aaa@aaa.com' . '>', 'to' => 'test.client91@gmail.com', 'h:Reply-To'=> ' <' . $mg_reply_to_email . '>', 'subject' => 'aaaaa'.time(), 'html' => 'aaaaaa', 'attachment'[1] => 'aaa.rar' )); $result = curl_exec($ch); curl_close($ch); $res = json_decode($result,TRUE); print_r($res); 

(Я использовал настройки электронной почты)

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

Вам нужно изменить последний параметр следующим образом: attachment[1]' => '@aaa.rar

У нас есть примеры в нашей документации для этого варианта использования. Просто нажмите PHP в верхней строке, чтобы переключить язык. http://documentation.mailgun.net/user_manual.html#examples-sending-messages-via-http

Пожалуйста, не стесняйтесь присылать нам электронное письмо с любыми вопросами на support@mailgunhq.com. Мы всегда рады помочь.

Я понимаю, что это старо, но я просто столкнулся с этой проблемой, и эта страница – это почти единственная информация, которую я могу найти в сети. Поэтому я надеюсь, что это поможет кому-то другому. После разговора с поддержкой MailGun я нашел следующие работы с текущим API.

Циклы через массив файлов вложений от нуля до n:

  $attachmentsArray = array('file1.txt', 'file2.txt'); $x = 1; foreach( $attachmentsArray as $att ) { $msgArray["attachment[$x]"] = curl_file_create( $att ); $x ++; } // relevant cURL parameter, $msgArray also contains to, from, subject parameters etc. curl_setopt($ch, CURLOPT_POSTFIELDS,$msgArray); 

Документация не говорит об этом явно, но сама вставка привязана к запросу как multipart / form-data.

Лучший способ отладить то, что происходит, – это использовать Fiddler для просмотра запроса. Убедитесь, что вы принимаете корневой сертификат Fiddler, или запрос не будет выдаваться из-за ошибки SSL.

Что вы должны увидеть в Fiddler для заголовков:

Печенье / Вход

 Authorization: Basic <snip>== 

сущность

 Content-Type: multipart/form-data; boundary=<num> 

И для TextView:

 Content-Disposition: form-data; name="attachment" @Test.pdf Content-Disposition: form-data; name="attachment"; filename="Test.pdf" Content-Type: application/pdf <data> 

Обратите внимание, что вы отправляете поле «attachment = @ <filename>». Для данных формы имя поля также является «вложением», затем имеет «filename = <filename>» (без «@») и, наконец, содержимое файла.

Я думаю, что CURL должен просто сделать это для вас магически, основываясь на использовании синтаксиса «@» и указав путь к файлу на вашей локальной машине. Но, не зная магического поведения, трудно понять, что происходит на самом деле.

Например, в C # это выглядит так:

 public static void SendMail(MailMessage message) { RestClient client = new RestClient(); client.BaseUrl = apiUrl; client.Authenticator = new HttpBasicAuthenticator("api", apiKey); RestRequest request = new RestRequest(); request.AddParameter("domain", domain, ParameterType.UrlSegment); request.Resource = "{domain}/messages"; request.AddParameter("from", message.From.ToString()); request.AddParameter("to", message.To[0].Address); request.AddParameter("subject", message.Subject); request.AddParameter("html", message.Body); foreach (Attachment attach in message.Attachments) { request.AddParameter("attachment", "@" + attach.Name); request.AddFile("attachment", attach.ContentStream.WriteTo, attach.Name, attach.ContentType.MediaType); } ... request.Method = Method.POST; IRestResponse response = client.Execute(request); } 

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

Я отправлял свои параметры POST с пустым / NULL значением «cc», например: $post_data['cc'] = NULL; , Это не помешало мне отправлять текстовые сообщения (без вложений), но это вызывало проблемы при отправке электронной почты с приложением. Удаление пустой cc из моего массива разрешило часть проблемы.

Кроме того, я использовал http_build_query прежде чем отправлять свои данные через PHP curl, и это предотвратило успешное отправку электронной почты с вложением.

Удаление пустой cc и http_build_query разрешило это для меня. Возможно, это необычный случай, но публикация в случае, если это полезно для тех, у кого есть такая же проблема.

Добавить файл вложения:

 "attachment[1]" = "@$_FILES['careerDocument']['tmp_name'];filename=test.jpg". ($contentType ? ';type=' . $contentType : '' ) ; curl_setopt($ch, CURLOPT_POSTFIELDS, ($message)); 

Тси работал для меня:

 <?php $filePath='@Wealth_AC_AMF.pdf'; $curl_post_data=array( 'from' => 'Excited User <noreply@test.com>', 'to' => 'test@gmail.com', 'subject' => 'Hello', 'text' => 'test', 'attachment[1]' => $filePath ); $service_url = 'https://api.mailgun.net/v3/test.com/messages'; $curl = curl_init($service_url); curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($curl, CURLOPT_USERPWD, "api:key-test"); 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); curl_close($curl); var_dump($response); ?>