You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用VB.NET的OpenEmail/Process.Start直接发送邮件无需手动点击

关于VB.NET批量自动发送邮件的问题

你用的OpenEmail函数和Process.Start调用mailto协议的方式,都没办法实现自动发送邮件,必须手动点击客户端的发送按钮。

为什么这两种方式不行?

  • OpenEmail本质是调用系统默认邮件客户端创建新邮件,它只负责填充收件人、主题和内容,没有提供触发发送的接口,完全依赖用户手动操作。
  • mailto:协议只是系统用来唤起邮件客户端的URL协议,同样只能预填邮件信息,没有权限控制邮件客户端的发送逻辑,客户端出于安全考虑也不会允许外部程序直接触发发送。

实现批量自动发送的替代方案

如果要实现无需手动操作的批量发送,直接用VB.NET的邮件发送类或者第三方库更靠谱,以下是两种常用方案:

方案1:使用.NET内置的SmtpClient(适用于.NET Framework)

Imports System.Net.Mail

Sub SendEmailAutomatically()
    ' 配置邮件信息
    Dim mail As New MailMessage()
    mail.From = New MailAddress("your-email@example.com")
    mail.To.Add("recipient@example.com")
    mail.Subject = "自动发送的邮件主题"
    mail.Body = "这是自动发送的邮件内容"

    ' 配置SMTP服务器(根据你的邮箱服务商调整参数)
    Dim smtp As New SmtpClient("smtp.example.com")
    smtp.Port = 587 ' 常用端口,Gmail/Outlook等多为587
    smtp.Credentials = New System.Net.NetworkCredential("your-email@example.com", "your-app-specific-password")
    smtp.EnableSsl = True ' 多数服务商要求启用SSL加密

    Try
        smtp.Send(mail)
        Console.WriteLine("邮件发送成功")
    Catch ex As Exception
        Console.WriteLine($"发送失败:{ex.Message}")
    Finally
        mail.Dispose()
        smtp.Dispose()
    End Try
End Sub

注意:Gmail、Outlook等邮箱需要开启应用专用密码,不建议开启低安全性应用权限。

方案2:使用第三方库MailKit(推荐,支持.NET Core/.NET 5+)

MailKit是功能更完善、兼容性更好的现代邮件库,先通过NuGet安装MailKit和MimeKit包,再使用以下代码:

Imports MailKit.Net.Smtp
Imports MimeKit

Sub SendEmailWithMailKit()
    Dim message As New MimeMessage()
    message.From.Add(New MailboxAddress("你的名字", "your-email@example.com"))
    message.To.Add(New MailboxAddress("收件人名字", "recipient@example.com"))
    message.Subject = "MailKit自动发送邮件"

    message.Body = New TextPart("plain") With {
        .Text = "这是用MailKit自动发送的邮件内容"
    }

    Using client As New SmtpClient()
        ' 连接SMTP服务器
        client.Connect("smtp.example.com", 587, True)
        ' 验证登录信息
        client.Authenticate("your-email@example.com", "your-app-specific-password")

        client.Send(message)
        client.Disconnect(True)
        Console.WriteLine("邮件发送成功")
    End Using
End Sub

批量发送的扩展

如果要批量发送,只需循环处理收件人列表即可:

Dim recipients As List(Of String) = New List(Of String) From {
    "user1@example.com",
    "user2@example.com",
    "user3@example.com"
}

For Each recipient In recipients
    ' 调用上述发送方法,替换收件人参数
    SendEmailToRecipient(recipient)
Next

内容的提问来源于stack exchange,提问作者Actarus Goldrake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 17:20:40