我知道存在類似的問題,但我仍無法使其工作或理解我應該做什麼。如何向包含多部分HTTP POST的SendGrid web api發送請求
我用C++編寫應用程序並使用QtCreator。我正在嘗試使用SendGrid web api發送附帶html文件的電子郵件。到目前爲止,我已經能夠發送電子郵件,但是我無法將文件附加到該文件(該文件是本地文件)。該文檔說:
文件內容必須是多部分HTTP POST的一部分。例如:
files[file1.jpg]=file1.jpg&files[file2.pdf]=file2.pdf'
我不太確定是什麼這意味着,所以我研究了一個多HTTP POST是什麼,看到的例子,但我看不到我怎麼會得到它與我在做什麼工作。 到目前爲止,所有的我都需要做的就是調用後,輸入鏈接的請求和POST數據:
api_user=your_sendgrid_username&api_key=your_sendgrid_password&[email protected]&toname=Destination&subject=Example_Subject&text=testingtextbody&[email protected]
我沒有看到一個多HTTP後會來到這個和它如何能取代當前的發佈數據,我見過像在多部分HTTP帖子中設置標題和正文的東西,但我沒有看到任何與我正在做什麼或我應該如何處理它有關。
可能有人請給我的,我怎麼能連接本地文件到後期調用SendGrid在Qt的C++
更新的例子: 這是我的賈斯汀·斯蒂爾的說明解釋:
char speechMk = '"';
QString boundary = "----------------------------123456789abc";
QByteArray data(QString("--" + boundary + "\r\n").toLatin1());
data.append(QString("Content-Disposition: form-data; name=" + QString(speechMk) + "api_user" + QString(speechMk) + "\r\n").toLatin1());
data.append("myuser");
data.append("\r\n");
data.append("--" + boundary + "\r\n");
data.append("Content-Disposition: form-data; name=" + QString(speechMk) + "api_key" + QString(speechMk) + "\r\n");
data.append("mypassword");
data.append("\r\n");
data.append("--" + boundary + "\r\n");
data.append("Content-Disposition: form-data; name=" + QString(speechMk) + "to" + QString(speechMk) + "\r\n");
data.append("[email protected]");
data.append("\r\n");
data.append("--" + boundary + "\r\n");
data.append("Content-Disposition: form-data; name=" + QString(speechMk) + "toname" + QString(speechMk) + "\r\n");
data.append("Destination");
data.append("\r\n");
data.append("--" + boundary + "\r\n");
data.append("Content-Disposition: form-data; name=" + QString(speechMk) + "subject" + QString(speechMk) + "\r\n");
data.append("eSubject");
data.append("\r\n");
data.append("--" + boundary + "\r\n");
data.append("Content-Disposition: form-data; name=" + QString(speechMk) + "text" + QString(speechMk) + "\r\n");
data.append("eBody");
data.append("\r\n");
data.append("--" + boundary + "\r\n");
data.append("Content-Disposition: form-data; name=" + QString(speechMk) + "from" + QString(speechMk) + "\r\n");
data.append("[email protected]");
data.append("\r\n");
data.append("--" + boundary + "\r\n");
data.append("Content-Disposition: form-data; name=" + QString(speechMk) + "files[1]" + QString(speechMk) + "; filename=" + QString(speechMk) + "TodayRoute.html" + QString(speechMk) + "\r\n");
data.append("Content-Type: application/octet-stream");
data.append("\r\n");
QFile file1(path);
if (!file1.open(QFile::ReadOnly)){
qDebug() << "could not open";
} else {
data.append(file1.readAll().toBase64() + "\r\n");
}
data.append("--" + boundary + "\r\n");
file1.close();
QNetworkAccessManager theMan;
QNetworkRequest req = QNetworkRequest(QUrl("https://api.sendgrid.com/api/mail.send.json"));
req.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("multipart/form-data; boundary=" + boundary));
theMan.post(req,data);
這就是我以前的(下面),它會發送附加文件的電子郵件,但附件不包含我想要的內容。
QByteArray data(QString("api_user=myuser&").toLatin1());
data.append("api_key=mypassword&");
data.append("[email protected]&");
data.append("toname=Destination&");
data.append("files[TodayRoute.html]=");
QFile file(path);
if (!file.open(QIODevice::ReadOnly)){
qDebug() << "QFile Error: File not found!";
// return data;
} else { qDebug() << "File found, proceed as planned"; }
data.append(file.readAll());
data.append("&subject=Example_Subject&");
data.append("text=testingtextbody&");
data.append("[email protected]");
QUrl mResultsURL = QUrl("https://api.sendgrid.com/api/mail.send.json");
QNetworkAccessManager mNetworkManager;
QNetworkRequest request(mResultsURL); //our server with php-script
mNetworkManager.post(request,data);
file.close();
如果你可以「翻譯」 VBA到你的語言看我的回答[http://stackoverflow.com/questions/35423101/sendgrid-attachments-are-empty-or-corrupt-using-api-vba ](http://stackoverflow.com/questions/35423101/sendgrid-attachments-are-empty-or-corrupt-using-api-vba) –
在那個例子中你會看到BASE64ENCODEDFILE,你會用Base64編碼文件替換它(從磁盤讀取,base64編碼)。要添加更多文件,請添加:dataToSend = dataToSend +「 - 」+ boundary + vbCrLf dataToSend = dataToSend +「Content-Disposition:form-data; name =」「files [2]」「; filename =」「 my2ndPDF.pdf 「」」 + vbCrLf dataToSend = dataToSend + 「內容類型:應用/八位字節流」 + vbCrLf dataToSend = dataToSend + 2NDBASE64ENCODEDFILE + vbCrLf dataToSend = dataToSend + 「 - 」 +邊界+ vbCrLf –
發佈一些代碼,以便我們看到你正在嘗試。這裏是一個示例如何附加一個文件,併爲QNAM多部分設置標頭http://stackoverflow.com/questions/15109656/qnetworkaccessmanager-post-http-multipart-from-serial-qiodevice – misha130