【问题标题】:Salesforce Apex SingleEmailMessage with Template to User not contact带有模板的 Salesforce Apex SingleEmailMessage 用户未联系
【发布时间】:2016-07-15 13:07:28
【问题描述】:

我正在尝试使用现有模板通过 SingleEmailMessage() 函数在 Apex 中发送电子邮件,并将其与自定义对象记录连接。

mail = new Messaging.SingleEmailMessage();
mail.setTemplateId('00Xb0000000iwks');
mail.setTargetObjectId(a.CAccount__r.OwnerId);  //lookup on account
mail.setToAddresses(new List<String>{a.CAccount__r.Owner.Email}); //email from account owner
mail.setTreatTargetObjectAsRecipient(false);
mail.setSaveAsActivity(false);
mail.setWhatId(a.Id);                        
this.mails.add(mail);    

这里我想用自定义对象记录“a”填充模板数据。但我收到以下错误:

WhatId is not available for sending emails to UserIds.

我无法找到一个明确的答案,即 Apex 中的电子邮件只能与 setTargetObjectId() 中的联系人对象一起发送。我不想做的是临时创建一个联系人,其唯一目的是发送电子邮件!?

如果有人有想法,请提前感谢

【问题讨论】:

    标签: email salesforce apex custom-object


    【解决方案1】:

    我终于找到了以下解决方案:http://opfocus.com/sending-emails-in-salesforce-to-non-contacts-using-apex/

    // Pick a dummy Contact
    Contact c = [select id, Email from Contact where email <> null limit 1];
    
    // Construct the list of emails we want to send
    List<Messaging.SingleEmailMessage> lstMsgs = new List<Messaging.SingleEmailMessage>();
    
    Messaging.SingleEmailMessage msg = new Messaging.SingleEmailMessage();
    msg.setTemplateId( [select id from EmailTemplate where DeveloperName='My_Email_Template'].id );
    msg.setWhatId( [select id from Account limit 1].id );
    msg.setTargetObjectId(c.id);
    msg.setToAddresses(new List<String>{'random_address@opfocus.com'});
    
    lstMsgs.add(msg);
    
    // Send the emails in a transaction, then roll it back
    Savepoint sp = Database.setSavepoint();
    Messaging.sendEmail(lstMsgs);
    Database.rollback(sp);
    
    // For each SingleEmailMessage that was just populated by the sendEmail() method, copy its
    // contents to a new SingleEmailMessage. Then send those new messages.
    List<Messaging.SingleEmailMessage> lstMsgsToSend = new List<Messaging.SingleEmailMessage>();
    for (Messaging.SingleEmailMessage email : lstMsgs) {
    Messaging.SingleEmailMessage emailToSend = new Messaging.SingleEmailMessage();
    emailToSend.setToAddresses(email.getToAddresses());
    emailToSend.setPlainTextBody(email.getPlainTextBody());
    emailToSend.setHTMLBody(email.getHTMLBody());
    emailToSend.setSubject(email.getSubject());
    lstMsgsToSend.add(emailToSend);
    }
    Messaging.sendEmail(lstMsgsToSend);
    

    它实际上工作正常 - 不同之处在于我创建了自己的虚拟联系人而不是使用现有联系人 - 因为可能没有可用的联系人或意外向所选虚拟联系人发送电子邮件 - 所以最好使用以下:

    Contact dummyContact = new Contact();
    dummyContact.LastName = 'DummmyContact';
    dummyContact.Email = 'dummmycontact@dummmycontact.com';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多