当我通过电子邮件发送日历文件时,它会正确显示在收件人的电子邮件中。当我以编程方式发送相同的文件时,它没有。这是我以编程方式做的事情
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim Mail As New MailMessage
Mail.Subject = "test email"
Mail.To.Add("someuser@gmail.com")
'Mail.To.Add("somesender@gmail.com")
Mail.From = New MailAddress("somesender@gmail.com")
Mail.Body = "This is a sample email using VB.NET"
Dim attachment As System.Net.Mail.Attachment
attachment = New System.Net.Mail.Attachment("C:\Users\x\Downloads\testCalendar.ics")
Mail.Attachments.Add(attachment)
Dim SMTP As New SmtpClient("smtp.gmail.com")
SMTP.EnableSsl = True
'SMTP.DeliveryMethod = SMTP.DeliveryMethod.SpecifiedPickupDirectory
SMTP.Credentials = New System.Net.NetworkCredential("somesender@gmail.com", "password")
SMTP.Port = "587"
SMTP.Send(Mail)
End Sub
这是测试文件的内容
BEGIN:VCALENDAR 版本:2.0 BEGIN:VEVENT DTSTART:20160930T110000 DTEND:20160930T120000 摘要:巴士底日派对 地点:加利福尼亚州Anahiem 123 Main Street 描述:这是一个测试说明 END:VEVENT END:VCALENDAR
有什么想法吗?
感谢
答案 0 :(得分:1)
使用System.Net.Mail绝对无法做到这一点,因为生成的MIME邮件内容将具有错误的结构。 VCalendar信息需要包含在特定的MIME部分中,但它将被放在一个单独的部分中,并被视为普通附件。
我专门编写了自己的SMTP客户端和MIME消息生成器,通过完全按照要求创建MIME内容来克服此问题。这样做的问题是我需要满足不同的安全协议,例如NTLM,这对代码来说是一种痛苦。
您可以找到支持nuget图库中所需行为的第三方SMTP客户端。