2017-05-20 6 views
2

作業中のcURL電子メールを送信しようとしています。にメッセージ本文を追加します。 私が見つけたすべてのカール電子メール付き添付ファイルの例がメッセージ本文を持っていないのは確かです。文字列をファイルバッファに追加して、cURLのメッセージ本文を送信します。smtp sendmail

PDFファイルを添付した短いテキストメールを送信する必要があります。

これは私がこれまでに試したことですが、コメントが付いていない行はコンパイルされて実行されますが、送信は失敗します。私は、メッセージ本体をSubjectから "\ r \ n"(空白行)で区切る必要があることを理解していますが、これは正しい方法ではありません。

//Create structure of email to be sent 
    fileBuf = new char[ADD_SIZE + no_of_rows][CHARS]; //ADD_SIZE for TO,FROM,SUBJECT,CONTENT-TYPE,CONTENT-TRANSFER- 
                 //ENCODING,CONETNT-DISPOSITION and \r\n 
    strcpy(fileBuf[len++],"To: " TO "\r\n"); 
    buffer_size += strlen(fileBuf[len-1]); 
    strcpy(fileBuf[len++],"From: " FROM "\r\n"); 
    buffer_size += strlen(fileBuf[len-1]); 
    strcpy(fileBuf[len++],"Subject: SMTP TLS example message\r\n"); 
    buffer_size += strlen(fileBuf[len-1]); 

    //strcpy(fileBuf[len++],"\r\n"); 
    //buffer_size += strlen(fileBuf[len-1]); 
    //strcpy(fileBuf[len++],"Message goes here, hopefully...\r\n"); 
    //buffer_size += strlen(fileBuf[len-1]); 

    strcpy(fileBuf[len++],"Content-Type: application/x-msdownload; name=\"" FILENAME "\"\r\n"); 
    buffer_size += strlen(fileBuf[len-1]); 
    strcpy(fileBuf[len++],"Content-Transfer-Encoding: base64\r\n"); 
    buffer_size += strlen(fileBuf[len-1]); 
    strcpy(fileBuf[len++],"Content-Disposition: attachment; filename=\"" FILENAME "\"\r\n"); 
    buffer_size += strlen(fileBuf[len-1]); 
    strcpy(fileBuf[len++],"\r\n"); 
    buffer_size += strlen(fileBuf[len-1]); 

完全なプロジェクトのコードがhere参照してくださいソリューション7.

でこれを実現する方法について何かアドバイスをいただければ幸いです。

#define FILENAME "Rpt05162017.pdf" 
static const char *payload_text[] = { 
    "To: " TO "\r\n", 
    "From: " FROM "(Example User)\r\n", 
    //"Cc: " CC "(Another example User)\r\n", 
    "Subject: SMTPS Example\r\n", 
    "Date: 17-May-2017\r\n", 
    "User-Agent: My eMail Client\r\n", 
    "MIME-Version: 1.0\r\n", 
    "Content-Type: multipart/mixed;\r\n", 
    " boundary=\"------------030203080101020302070708\"\r\n", 
    "\r\nThis is a multi-part message in MIME format.\r\n", 
    "--------------030203080101020302070708\r\n", 
    "Content-Type: text/plain; charset=utf-8; format=flowed\r\n", 
    "Content-Transfer-Encoding: 7bit\r\n", 
    "\r\n", // empty line to divide headers from body, see RFC5322 
    "The body of the message starts here.\r\n", 
    "\r\n", 
    "It could be a lot of lines, could be MIME encoded, whatever.\r\n", 
    "Check RFC5322.\r\n\r\n", 
    "--------------030203080101020302070708\r\n", 
    "Content-Type: application/x-msdownload; name=\"" FILENAME "\"\r\n", 
    "Content-Transfer-Encoding: base64\r\n", 
    "Content-Disposition: attachment; filename=\"" FILENAME "\"\r\n", 
    "\r\n--------------030203080101020302070708--", 
    NULL 
}; 

答えて

0

それはあなたがすべてのものを送信する方法は明らかではありません。非常にシンプルなカールを使用して

[編集]テストは、0バイトの添付ファイルを生成します。文字列の2次元配列を作成し、それぞれのヘッダにstrcpyを付けます。それらのすべてにメッセージを破損するパディングバイトがあります。

多分それを簡略化しようとしますか?

std:string header = 
"To: " TO "\r\n" 
"From: " FROM "\r\n" 
"Subject: SMTP TLS example message\r\n" 
"Content-Type: application/x-msdownload; name=\"" FILENAME "\"\r\n" 
"Content-Transfer-Encoding: base64\r\n" 
"Content-Disposition: attachment; filename=\"" FILENAME "\"\r\n" 
"\r\n"; 

、その後、単にheaderは、あなたのメッセージのbodyに続いてメッセージを送信します。あなたの更新payload_text


あなたは空のファイルを送信しているので、それはあなたが0サイズの添付ファイルを取得驚きではありません。

"\r\n--------------030203080101020302070708--" 
+0

私は基本的なcURLの例に簡単な方法をテストしたが、添付ファイルを含む配信されています。あなたはあなたのpayload_textあなたはファイルのあなたの体を送信する必要があり、その後、あなたがマルチパート決算サフィックスを追加する必要があり、本体の後に送信した後0バイト。上記の編集を参照してください。 – Ashton

+0

ありがとうPavel、 _ "あなたのpayload_textを送信した後、ファイルの本文を送信してから、本文の後ろにmultipart closing suffixを追加する必要があります:" _ ファイルが見つからないため、コード? 私のコードはこの接尾辞が欠けていたので空のファイルを送信していますか? (違いはありません) '' \ r \ n -------------- 030203080101020302070708 - 「 他に必要なコードがありませんか?私は、テキストメッセージと添付ファイルを含むペイロード定式化をカバーするcurl.haxx.seの仕様を見つけることはできません。特別感謝。 – Ashton

関連する問題