我知道存在类似的问题,但我仍无法使其工作或理解我应该做什么。如何向包含多部分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