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

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

$mg_api = 'key-3ax6xnjp29jd6fds4gc373sgvjxteol0';
$mg_version = 'api.mailgun.net/v2/';
$mg_domain = "samples.mailgun.org";
$mg_from_email = "[email protected]";
$mg_reply_to_email = "[email protected]";

$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 <' . '[email protected]' . '>',
                'to'        => '[email protected]',
                '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-адрес вместо вложения.

Ответ 1

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

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

Пожалуйста, не стесняйтесь присылать нам электронное письмо с любыми вопросами на [email protected] Мы всегда рады помочь.

Ответ 2

Я понимаю, что это старо, но я просто столкнулся с этой проблемой, и эта страница - это почти единственная информация, которую я могу найти в сети. Поэтому я надеюсь, что это поможет кому-то другому. После разговора с поддержкой 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);

Ответ 3

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

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

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

Файлы cookie/Логин

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 должен просто сделать это для вас магически, основываясь на использовании синтаксиса "@" и указав путь к файлу на вашей локальной машине. Но, не зная магического поведения, трудно понять, что на самом деле происходит.

Например, в С# он выглядит следующим образом:

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);
}

Ответ 4

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

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

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

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

Ответ 5

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

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

Ответ 6

Thsi работал у меня:

<?php

$filePath='@Wealth_AC_AMF.pdf';

$curl_post_data=array(
    'from'    => 'Excited User <[email protected]>',
    'to'      => '[email protected]',
    '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);



 ?>