12

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 が表示されます。

4

9 に答える 9

7

次の方法で最後のパラメーターを変更する必要があります。 attachment[1]' => '@aaa.rar

このユースケースのドキュメントには、いくつかのサンプルがあります。トップバーの PHP をクリックするだけで、言語を切り替えることができます。 http://documentation.mailgun.net/user_manual.html#examples-sending-messages-via-http

ご不明な点がございましたら、support@mailgunhq.com までお気軽にメールでお問い合わせください。私たちはいつでも喜んでお手伝いします。

于 2013-01-09T18:13:07.330 に答える
4

ドキュメントには明示的に記載されていませんが、添付ファイル自体は 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>' を POST することに注意してください。form-data の場合、フィールド名も「attachment」になり、次に「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);
}
于 2013-03-21T04:57:19.680 に答える
3

私はしばらくこの問題に行き詰まり、ここでの回答が役に立ちましたが、まだ言及されていないことに遭遇しました。

次のような空白/NULL 'cc' 値を含む POST パラメーターを送信していました$post_data['cc'] = NULL;。これにより、テキスト メール (添付ファイルなし) の送信が妨げられることはありませんでしたが、添付ファイル付きのメールを送信するときに問題が発生しました。ccアレイからブランクを削除すると、問題の一部が解決されました。

さらにhttp_build_query、PHP curl を介してデータを投稿する前に使用していたため、添付ファイル付きのメールが正常に送信されませんでした。

ccを削除して、http_build_queryこれを解決しました。珍しいケースかもしれませんが、同じ問題を抱えている人の役に立つ場合に備えて投稿してください。

于 2017-01-15T21:43:37.763 に答える
0

添付ファイルを追加:

"attachment[1]" = "@$_FILES['careerDocument']['tmp_name'];filename=test.jpg".
($contentType ? ';type=' . $contentType : '' ) ;
curl_setopt($ch, CURLOPT_POSTFIELDS, ($message));
于 2016-05-11T12:02:54.927 に答える
0

これは私のために働いた:

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



 ?>
于 2016-06-24T07:02:04.917 に答える