0

我的人员正在尝试使用自定义按钮从 VF 页面发送电子邮件。单击发送按钮时,会调用控制器类的发送方法来发送电子邮件。

public PageReference send() {
    try {
        Messaging.SingleEmailMessage singleEmailMsg = new Messaging.SingleEmailMessage();
        singleEmailMsg.setTargetObjectId(emailMsg.ToIds[0]); // This line is causing the System.ListException: List index out of bounds: 0

        if (emailMsg.BccAddress != null && emailMsg.BccAddress != '') {
            singleEmailMsg.setBccAddresses(emailMsg.BccAddress.split(';'));
        }

构造函数:

    public SendQuoteEmail_Controller(ApexPages.StandardController controller) {
    qtId=ApexPages.currentPage().getParameters().get('Id');
    if(qtId != NULL)
        qt = [SELECT Id, Name, Contact_Person__c, Contact_Person__r.Name, Contact_Person__r.Email, Opportunity__r.Id
                FROM Quote__c
                WHERE Id = :qtId];
    ownerId = [Select Id,CreatedById from Quote__c where Id=:qtId].CreatedById;
    emailMsg = new EmailMessage();
    emailMsg.Subject = 'Quote for Opportunity';

    emailMsg.ToIds = new List<Id>{qt.Contact_Person__c}; // This collection is coming out as empty in debug (emailMsg.ToIds.size() = 0)

    emailMsg.fromAddress = UserInfo.getUserEmail();
    emailMsg.HtmlBody = 'Please find attached the quote';
    List<Attachment> lstAttachments = [SELECT Id,Name, Body, ContentType, Bodylength 
                                        FROM Attachment 
                                        WHERE ParentId = :qt.Id 
                                        ORDER BY CreatedDate DESC];
    opp = [SELECT Id, Name, Quote_Sent__c 
             FROM Opportunity__c 
             WHERE Id = :qt.Opportunity__r.Id];
    //Ended
                                   
    }
}

令我惊讶的是,即使 qt.Contact_Person__c 字段中有一个值,emailMsg.ToIds[0] 也会引发异常。此外,emailMsg.ToIds 被调试为空。这可能是什么原因造成的?

4

1 回答 1

0

我有点惊讶这编译好。EmailMessage是一个标准对象,但正式它没有toIds字段。除了您可以在页面底部的示例中看到它。一些无证的混乱。也许在支持下提出案例。

按钮是什么样的?如果您在那里有“立即=真”或顶点:动作区域,它可能是合法的不回发整个视图状态......该System.debug评论是关于从构造函数或按钮单击处理程序进行调试?

几周前,我在电子邮件中遇到了一个微妙的错误。似乎原始访问ccAddresses例如是错误的。https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_email_outbound_single.htm说这些都应该可以访问并且您的代码可以编译......我不得不使用setCcAddresses()调用

您已经有 SingleEmailMessage,也许尝试显式设置setTargetObjectId(contact id goes here)

于 2020-07-20T10:54:37.010 回答