【发布时间】:2018-01-16 10:05:37
【问题描述】:
我正在使用 Indy 组件 (TIdMessage) 通过 SMTP 发送电子邮件。这样的邮件需要是HTML,并且需要携带附件。
现在,如果我以纯文本 (ContentType := 'text/plain') 形式发送电子邮件并附上文件,则电子邮件会正常发送,找到附件以及所有内容。
但是,一旦我将ContentType 更改为text/html,我就会得到一个非常奇怪的结果。电子邮件的整个正文显然被底层电子邮件数据(用我的话)替换,并将正文中的附件显示为 Base64 数据。
例如,这只是生成的电子邮件的前几行:
这是一条 MIME 格式的多部分消息 --YGuFowdSjNaa=_khosBzZl5L8uGVtfasBX 内容类型:文本/纯文本; charset="us-ascii" 内容传输编码:quoted-printable 内容处置:内联 这是测试电子邮件的正文。 --YGuFowdSjNaa=_khosBzZl5L8uGVtfasBX 内容类型:应用程序/八位字节流;名称="标签标志.jpg" 内容传输编码:base64 内容处置:内联;文件名="TagLogo.jpg" /9j/4AAQSkZJRgABAQEASwBLAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcU FhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgo KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCADhAG8DASIA AhEBAxEB/8QAHAAAAgMBAQEBAAAAAAAAAAAAAAcFBggEAgED/8QAPxAAAQIFAwEEBwYFAwQDAAAA AQIDAAQFBhEHEiExCBNBdSI3OFFhsrMUMkJxgZEVIzNSgmJyoRaSosEk0eH/xAAWAQEBAQAA虽然原来的身体只是
This is the body of a test email.
代码很简单,符合我在网上能找到的所有例子……
IdMessage.Charset := 'UTF-8';
IdMessage.ContentType := 'text/html'; // <-- text/plain works fine.....
IdMessage.Body := 'This is the body of a test email.';
... (Assigning Other Unrelated Properties) ...
A := TIdAttachmentFile.Create(IdMessage.MessageParts, 'C:\SomeFile.jpg'); // <-- Originally the only LOC here
A.ContentTransfer := 'base64'; // <-- Tried with and without
A.ContentType := 'application/octet-stream'; // <-- Tried with and without
//A.ContentType := 'image/jpeg'; // <-- Tried with and without
A.ContentDisposition := 'inline'; // <-- Tried with and without
为什么这会导致“垃圾”电子邮件,在支持带有附件的 HTML 电子邮件正文的同时如何解决它?
PS - 如果有任何不同,附件将是最终在电子邮件正文中内嵌使用的图像。
【问题讨论】:
标签: html delphi smtp email-attachments indy