2013-02-10 226 views
0

我用这对在Salesforce使用sendgrid API带附件发送邮件...我收到错误响应,错误的请求和状态代码:400文件上传rest api .....?

有人帮我弄明白.. ???这

String Boundary = '----------------------------400f182a9360';  
String requestBody; 
requestBody ='--' + Boundary +'\r\n\r\n'+'Content-Disposition: form-data; name="api_user"'+'\r\n\r\n'+'youremail'+'\r\n\r\n' ; 
requestBody +='--' + Boundary +'\r\n\r\n'+'Content-Disposition: form-data; name="api_key"'+'\r\n\r\n'+'yourpassword'+'\r\n\r\n' ; 
requestBody +='--' + Boundary +'\r\n\r\n'+'Content-Disposition: form-data; name="to"'+'\r\n\r\n'+'[email protected]'+'\r\n\r\n' ; 
requestBody +='--' + Boundary +'\r\n\r\n'+'Content-Disposition: form-data; name="subject"'+'\r\n\r\n'+'test'+'\r\n\r\n' ; 
//requestBody +='--' + Boundary +'\r\n\r\n'+'Content-Disposition: form-data; name="html"'+'\r\n\r\n'+'<b>hi</b>'+'\r\n\r\n' ; 
requestBody +='--' + Boundary +'\r\n\r\n'+'Content-Disposition: form-data; name="text"'+'\r\n\r\n'+'mail'+'\r\n\r\n' ; 
requestBody +='--' + Boundary +'\r\n\r\n'+'Content-Disposition: form-data; name="from"'+'\r\n\r\n'+'[email protected]'+'\r\n\r\n' ; 
requestBody += '--' + Boundary + '\r\n\r\n'+'Content-Disposition: form-data; name="files['+mails.filename+']";filename="'+mails.filename+ '"\r\n\r\n'+ 'Content-Type:'+mails.conType+'\r\n\r\n'+Encodingutil.base64Encode(mails.bl)+'\r\n\r\n'; 
requestBody+= '--' + Boundary + '--\r\n'; 

String url= 'https://sendgrid.com/api/mail.send.json'; 

Http h = new Http();   
HttpRequest req = new HttpRequest();  
// req.setTimeout(60000);   
req.setEndpoint(url); 
req.setMethod('GET');   
req.setHeader('Content-Type', 'multipart/form-data; boundary=' +Boundary);     
req.setHeader('Content-Length',String.valueof(requestBody.length()));  
system.debug('=====length======'+String.valueof(requestBody.length())); 
//req.setHeader('Authorization','Bearer '+ssId); 
req.setBody(requestBody); 
HttpResponse res;    
String resURL;    
res = h.send(req); 
response=res.getbody(); 
System.debug('++++++++++++++'+requestBody); 
System.debug('++++++++++++++'+url); 
system.debug('=====response is======'+response); 
if(response.contains('success')) 
{ 
    response='{"message":"success"}'; 
} 
else 
{ 
    response='error: '+res.getbody(); 
} 

输出

------------------------------400f182a9360 

Content-Disposition: form-data; name="api_user" 

sendgridusername 

------------------------------400f182a9360 

Content-Disposition: form-data; name="api_key" 

sendgridpassword 

------------------------------400f182a9360 

Content-Disposition: form-data; name="to" 

[email protected] 

------------------------------400f182a9360 

Content-Disposition: form-data; name="subject" 

test 

------------------------------400f182a9360 

Content-Disposition: form-data; name="text" 

mail 

------------------------------400f182a9360 

Content-Disposition: form-data; name="from" 

[email protected] 

------------------------------400f182a9360 

Content-Disposition: form-data; name="files[New Text Document.txt]";filename="New Text Document.txt" 

Content-Type:text/plain 

YW5pbWVzaCBzZGYgc2RmIHMgZiBzIGRmIHNk 

------------------------------400f182a9360-- 

回答

1

有很多在你的代码是没有意义对我来说,尤其是节时,你很特别壳体内的base64编码数据如果以=结尾。我不确定你为什么需要这个。页眉和页脚以直接文本的形式出现在主体中,不需要任何额外的处理。

一个猜测是,当你建立你的身体(称为变量url令人困惑)时,你需要使用bodyBlob.toString()而不仅仅是bodyBlob

这个StackOverflow question就是一个很好的例子,说明如果你发布二进制数据,那么正文应该是什么样子。我有一种感觉,你没有正确地建立你的。

这是另一个很好的资源在什么body looks like for posted data。你似乎没有用这种格式构建一些东西。

+0

谢谢回复mate .... bodyBlob.toString()只适用于文本文件不适用于其他格式,如图像...我应该从他们做些什么....你能帮忙吗... – user2034816 2013-02-13 04:50:38

+0

我有修改了这个问题......有人可以帮助我... – user2034816 2013-02-13 09:05:07

+0

我对'sendgrid' API不太熟悉,但你需要修复的第一件事是在边界之后的双CRLF。它应该只有一个换行符,然后是标题,然后是两行和数据。我也认为你可以在数据和下一个边界之间减少一个换行符。 – tomlogic 2013-02-13 18:34:37