Delphi中如何使用TSendMail创建带附件的可编辑电子邮件
解决方案
- 属性配置修正
TSendMail动作默认未开启弹窗配置,会静默执行后台发送逻辑,即使Execute返回成功也不会唤起邮件编辑窗口。你需要在调用执行前显式配置相关属性:
// 强制开启编辑窗口弹窗 InternetSendMail1.SendOptions := [soShowDialog]; // 可预设内容,也可留空让用户自行填写 InternetSendMail1.Recipients.Add(''); // 收件人留空 InternetSendMail1.Subject := '预设邮件主题'; InternetSendMail1.Body.Text := '预设正文内容'; // 添加附件,支持多次调用添加多个附件 InternetSendMail1.Attachments.Add('C:\示例路径\附件文件.pdf'); // 执行调用 var OK := InternetSendMail1.Execute; CodeSite.Send('执行结果', OK);
- 架构匹配检查
如果修改属性后仍无响应,大概率是应用编译架构和邮件客户端架构不兼容:
如果你编译的是32位VCL应用,但系统安装的是64位Thunderbird,反之亦然,都会出现MAPI调用无响应但返回成功的情况。你可以将VCL应用的编译架构调整为和Thunderbird一致的架构即可解决。 - 权限问题排查
如果你的VCL应用配置了requireAdministrator运行权限,而Thunderbird是以普通用户身份运行,Windows UAC权限隔离机制会阻止高权限进程唤起低权限进程的窗口,只需将应用运行权限调整为普通用户权限即可。
如果以上方法都无法解决,可以直接调用Windows原生MAPISendMail接口实现相同需求,兼容性优于VCL封装的TSendMail动作。
内容的提问来源于stack exchange,提问作者user1580348
相关产品推荐
相关产品推荐

