通过电子邮件Vb.net发送ICS日历文件

时间:2016-12-06 16:34:41

标签: vb.net calendar icalendar

当我通过电子邮件发送日历文件时,它会正确显示在收件人的电子邮件中。当我以编程方式发送相同的文件时,它没有。这是我以编程方式做的事情

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

有什么想法吗?

感谢

1 个答案:

答案 0 :(得分:1)

使用System.Net.Mail绝对无法做到这一点,因为生成的MIME邮件内容将具有错误的结构。 VCalendar信息需要包含在特定的MIME部分中,但它将被放在一个单独的部分中,并被视为普通附件。

我专门编写了自己的SMTP客户端和MIME消息生成器,通过完全按照要求创建MIME内容来克服此问题。这样做的问题是我需要满足不同的安全协议,例如NTLM,这对代码来说是一种痛苦。

您可以找到支持nuget图库中所需行为的第三方SMTP客户端。