使用C#通过Process.Start发送电子邮件

3
我想使用默认的邮件应用程序发送纯文本邮件,不附加任何文件。
我知道可以使用 Process.Start 来完成,但是我无法使其正常工作。这是我目前的代码:
string mailto = string.Format("mailto:{0}?Subject={1}&Body={2}", "to@user.com", "Subject of message", "This is a body of a message");
System.Diagnostics.Process.Start(mailto);

但它只是打开了预先编写好的文本的Outlook消息。我想直接发送而不需要用户手动点击“发送”按钮。我错过了什么吗?谢谢。

4
为什么你期望它会是那样呢?我很高兴没有任何随机应用程序可以在我不知情或未经允许的情况下使用我的电子邮件程序发送电子邮件。 - Maarten
使用 SmtpClient 类。 - kennyzx
如果应用程序出现问题,我希望自动将错误日志发送给系统管理员。 - Robert J.
如果由于某种原因您必须使用Outlook,通过COM Interop自动化Outlook是最佳选择。对于命令行,请参见:通过Outlook在命令行发送电子邮件而无需点击“发送”。对于其他电子邮件客户端的通用解决方案,很抱歉,您运气不好 - 没有这样的常见接口。 - Alex K.
进程启动不会完全自动化发送电子邮件。它只会打开电子邮件准备发送(正如您所见)。 - landoncz
3个回答

5
您需要执行以下操作:
string mailto = string.Format("mailto:{0}?Subject={1}&Body={2}", "to@user.com", "Subject of message", "This is a body of a message");
mailto = Uri.EscapeUriString(mailto);
System.Diagnostics.Process.Start(mailto);

1
这与OP已经在做什么有何不同?它不会自动发送消息,而只会在屏幕上显示。 - Dmitry Streblechenko

3

对于Process.Start()我不确定,它可能只会在默认的邮件应用程序中打开邮件消息,而不会自动发送。

但有两种可能的替代方法:


2
你需要这样做:
SmtpClient m_objSmtpServer = new SmtpClient();
MailMessage objMail = new MailMessage();
m_objSmtpServer.Host = "YOURHOSTNAME";
m_objSmtpServer.Port = YOUR PORT NOS;

objMail.From = new MailAddress(fromaddress);
objMail.To.Add("TOADDRESS");

objMail.Subject = subject;
objMail.Body = description;
m_objSmtpServer.Send(objMail);

是的,我看过这个解决方案,但我想使用 Process.Start 来实现。 - Robert J.
我相信使用 Process.Start 你将无法做到这一点。它只会简单地打开 Outlook。 - adityaswami89

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接