Visualforce Apex控制器发送邮件遇INVALID_EMAIL_ADDRESS错误求助
问题详情
以下代码在普通Apex类或Execute Anonymous窗口中可正常运行,但在Visualforce页面控制器中执行时,抛出无效邮箱地址错误:
示例代码
Contact contact = [SELECT Id, Email FROM Contact WHERE Id = '003Pw000005Y121IAC' LIMIT 1]; Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage(); email.setSubject('subject'); email.setPlainTextBody('body'); email.setTargetObjectId(contact.Id); email.setSaveAsActivity(true); Messaging.sendEmail(new Messaging.SingleEmailMessage[] { email });
错误信息
Messaging.SendEmailError[getMessage=Email address is invalid:
;getStatusCode=INVALID_EMAIL_ADDRESS;getTargetObjectId=003Pw00000AXApOIAX
排查方向与解决方法
检查当前用户权限:Visualforce控制器以当前登录用户的上下文运行,若该用户没有目标Contact记录的Read权限,或没有Contact对象Email字段的Read权限,查询返回的
contact.Email会是空值,触发无效邮箱错误。去设置里检查用户所属Profile或Permission Set的字段权限,确保Email字段的访问权限已开启。调试查询结果:在控制器代码中添加调试语句,打印查询到的邮箱值,确认是否为空:
System.debug('查询到的Contact邮箱:' + contact.Email);打开开发者控制台查看日志,如果输出为空,说明权限或记录访问问题导致无法获取邮箱。
确认目标Contact的实际状态:检查错误信息里的TargetObjectId(
003Pw00000AXApOIAX)对应的Contact记录,看它的Email字段是否确实有值,同时确认当前用户在UI中能否看到该邮箱字段。移除硬编码ID:代码里硬编码的Contact ID(
003Pw000005Y121IAC)和错误里的目标ID不一致,说明实际运行时使用的是其他Contact记录。建议通过页面参数、关联记录等动态方式获取目标ID,避免环境切换(沙盒/生产)导致ID失效。
内容的提问来源于stack exchange,提问作者GCL

