如何用MailKit在发送的邮件中设置个人资料头像?
用C# + MailKit设置发件人个人资料头像
你提到的邮件中发件人旁的缩略头像,多数邮件客户端默认读取发件人邮箱关联的全局账号头像(比如Gmail/Outlook账号设置的头像),但也可以通过MailKit给邮件附加vCard(电子名片)的方式,指定自定义头像供客户端识别。
方法一:通过MailKit添加vCard附件实现
修改你现有代码,添加带头像的vCard附件,客户端会读取vCard中的照片信息作为发件人头像:
using MailKit.Net.Smtp; using MailKit.Security; using MimeKit; using MimeKit.Text; using MimeKit.Cryptography; namespace MailKitTest { class Program { static void Main(string[] args) { // 创建邮件消息 var email = new MimeMessage(); email.From.Add(MailboxAddress.Parse("Ok Novità <test@test.it>")); email.To.Add(MailboxAddress.Parse("test@test.it")); email.Subject = "Test Email Subject"; // 原邮件正文 var body = new TextPart(TextFormat.Html) { Text = "<h1>Example HTML Message Body</h1>" }; // 创建带头像的vCard var vcard = new vCard(); vcard.FormattedName = "Ok Novità"; vcard.EmailAddresses.Add(new vCardEmailAddress("test@test.it")); // 加载本地头像图片(替换为你的图片路径,支持JPG/PNG) using var avatarStream = File.OpenRead("your-avatar.jpg"); var photo = new vCardPhoto(avatarStream, "image/jpeg"); // 图片格式对应修改,比如image/png vcard.Photo = photo; // 将vCard转为邮件附件 var vcardAttachment = new MimePart("text", "vcard") { Content = new MimeContent(vcard.ToStream()), ContentDisposition = new ContentDisposition(ContentDisposition.Attachment), ContentTransferEncoding = ContentEncoding.Base64, FileName = "contact.vcf" }; // 组合正文和附件为多部分邮件 var multipart = new Multipart("mixed"); multipart.Add(body); multipart.Add(vcardAttachment); email.Body = multipart; // 发送邮件 using var smtp = new SmtpClient(); smtp.Connect("[custom_smtp]", 587, SecureSocketOptions.StartTls); smtp.Authenticate("[custom_username]", "[custom_password]"); smtp.Send(email); smtp.Disconnect(true); } } }
注意:部分邮件客户端(比如iOS邮件)可能优先显示账号关联的全局头像,而非vCard中的照片,这种情况下需要结合方法二。
方法二:设置邮箱账号的全局头像
如果不需要针对单封邮件自定义头像,最稳妥的方式是直接在发件人邮箱的服务商后台设置头像:
- 若使用Gmail:登录Google账号,进入「个人资料」页面上传头像
- 若使用Outlook/Exchange:登录微软365账号,在「我的资料」中设置头像
- 其他邮箱服务商(如QQ邮箱、网易邮箱)同理,在账号设置中上传头像
设置完成后,所有从该邮箱发出的邮件,客户端都会自动显示这个头像,无需代码处理。
内容的提问来源于stack exchange,提问作者Matemagician
相关产品推荐
相关产品推荐

