2016-07-15 26 views
0

我試圖發送Apex郵件與SingleEmailMessage()函數使用現有的模板並將其與自定義對象記錄連接。Salesforce Apex SingleEmailMessage帶模板到用戶不聯繫

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. 

無處我能找到的()明確的答案,在頂點電子郵件只能與一個接觸對象setTargetObjectId發送。我想要做的就是暫時創建一個聯繫人,以發送電子郵件的唯一目的!

在此先感謝,如果有人有一個想法

回答

0

我終於發現從採取了以下解決方案: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>{'[email protected]'}); 

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 = '[email protected]';