【问题标题】:Send emails with attachments in salesforce via sendgrid通过 sendgrid 在 Salesforce 中发送带有附件的电子邮件
【发布时间】:2014-05-20 01:04:34
【问题描述】:

我正在尝试生成 pdf 并附加到电子邮件并发送。 我正在使用 salesforce 和 sendgrid。 我可以发送电子邮件,但问题是当我尝试附加 pdf 时,电子邮件带有附件,但这已损坏,文件不是空的,但 pdf 显示已损坏(我认为是转换问题) 这是代码

    Messaging.EmailFileAttachment efa = new Messaging.EmailFileAttachment();
    PageReference pdf = Page.include_attachment;
  pdf.getParameters().put('id', 'xxxxxxxxxxxxxxxxxx');
    blob fileBody = pdf.getContentAsPDF();
    efa.setBody(fileBody);
    efa.setFileName('test.pdf');
    efa.setContentType('application/pdf;charset=UTF-8;');
    send('xxxxx@xxxx.com','Test','Body Test', fileBody);

我尝试过使用

pdf.getContentAsPDF();

pdf.getContent();

但结果是一样的。

发送方法

public static void send(String emailRecipient, String emailSubject, String emailBody, Blob att){
    Boolean success=true;

    //construct the body of the request
    String requestBody='';
    requestBody += 'to='+EncodingUtil.urlEncode(emailRecipient,'UTF-8');
    requestBody += '&from='+EncodingUtil.urlEncode(user.Email,'UTF-8');
    requestBody += '&fromname='+EncodingUtil.urlEncode(user.Name,'UTF-8');
    requestBody += '&subject='+EncodingUtil.urlEncode(emailSubject,'UTF-8');
    requestBody += '&text='+EncodingUtil.urlEncode(emailBody.trim(),'UTF-8');
    requestBody += '&html='+EncodingUtil.urlEncode(emailBody.trim(),'UTF-8');
    requestBody += '&api_user=xxxxx';
    requestBody += '&api_key=xxxxx';
    requestBody += '&files[attachment.pdf]=@'+ EncodingUtil.base64Encode(att);

    //construct request
    HttpRequest req = new HttpRequest();
    req.setEndpoint('https://sendgrid.com/api/mail.send.json');
    req.setMethod('POST');
    req.setBody(requestBody);
    try{
        //send request
        Http h = new Http();
        HttpResponse res = h.send(req);
        //check response
        String status = res.getStatus();
        if(status.toUpperCase()=='OK'){
            success=true;
        }
        else{
            success=false;
        }
    }
    catch(Exception e){
        success=false;
    }
}

谢谢

【问题讨论】:

  • 您可能想联系Scott Motte。他正在创建一个库,用于与 Salesforce 的 SendGrid 一起使用。你的 send 方法的主体是什么样的?
  • 非常感谢@Daniel 的评论,我发布了发送方法。
  • 就像Daniel Ballinger 说我现在正在研究图书馆。丹尼尔一直在帮忙。我现在没有这个问题的答案,但今天正在努力。

标签: salesforce sendgrid


【解决方案1】:

现在有一个库/devtoolkit 可以为您执行此操作。在撰写本文时,它处于测试阶段,但它正在运行。免责声明:我在 SendGrid 工作,最近刚刚开发了这个库。

sendgrid-apex

您可以将代码重写为:

...
Blob att = pdf.getContentAsPDF();
public static void send(String emailRecipient, String emailSubject, String emailBody, Blob att){

  SendGrid sendgrid = new SendGrid('username', 'password');

  SendGrid.email email = new SendGrid.Email();
  email.addTo(emailRecipient);
  email.setFrom(user.Email);
  email.setFromName(user.Name);
  email.setSubject(emailSubject);
  email.setText(emailBody.trim());
  email.setHtml(emailBody.trim());
  email.addAttachmentStream("attachment.pdf", att);

  String response = sendgrid.send(email);
}

【讨论】:

  • 非常感谢您的工作!我正在尝试实施您的解决方案,当我附加一个 txt 时工作,但当我尝试在 Salesforce 中生成一个 pdf,然后附加它时(我得到的错误是 BLOB 不是有效的 UTF-8 字符串),它有道理,但也许有办法解决这个问题,我会继续努力解决它。谢谢。
  • 好的,这可能是一个错误(根据我对如何处理 blob 的理解)。导致该错误的代码是here。它正在尝试将其转换为字符串,但不会以 UTF-8 的形式返回。我已将其发布为问题 here 并将努力修复它。
  • @scottmotte ,这个问题有什么解决方案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 2016-10-23
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多