销售IIS 6.0营销Win64.NET CFCEO系统管理员QADBAIISVisual Studio .NET 2003Windows 2003Win32Visual Studio 2008.NET 1.1.NET 3.0Visual Studio 2005WCF设计/图形所有主题架构师Windows XP.NET 2.0.NET 3.5Windows 窗体C# 2.0初学者C# 3.0C# 4.0中级开发Visual StudioWindows.NETC#
从 Windows 应用程序发送电子邮件






4.40/5 (91投票s)
本文使您能够从 Windows 应用程序发送电子邮件,这通常是一项繁琐的任务
引言
通常,从 Windows 应用程序发送电子邮件是一项繁琐的任务。此外,您可能需要为每台机器启用 IIS。本文介绍了一种从 Windows 应用程序发送电子邮件的替代机制。
背景
上述机制(在每台机器上启用 IIS)对于用户数量较少的应用程序是可行的。但是,在用户数量众多的应用程序中,在每台桌面上启用 IIS 和设置 SMTP 是不可行的。此外,从 CDO 发送电子邮件与 Exchange Server 冲突。本文介绍了该问题的替代方法。
Using the Code
开发人员可能会在 Internet 上找到数千个关于如何通过 Windows 应用程序发送电子邮件的网站。其中大多数都需要在每台桌面上启用 IIS。有关详细信息,请访问此处。我尝试搜索一种替代机制,在该机制中,我们需要强制每个用户启用 SMTP。在本文中,我们使用托管在数据库服务器上的 Web 服务。开发人员也可以将服务托管在其他任何特定 Web 服务器上。
下图显示了涉及的架构

要实现此功能,我们遵循以下步骤:
- 创建具有接受相关参数的 Web 方法的 Web 服务,并将邮件发送给指定人员:添加
System.Web.Mail
和System.Net
的引用。然后,添加 Web 方法以将邮件发送给相关人员,如下所示:string sTo = "mysmtp@inf.com"; string sFrom = conn; string sBody = ""; try { MailMessage mail = new MailMessage(); mail.From = sFrom.ToString(); // put the from address here mail.To = sTo.ToString(); // put the to address here mail.Subject = "Request To Work on Item"; // put the subject here mail.Body = sBody.ToString(); mail.BodyFormat = System.Web.Mail.MailFormat.Html; SmtpMail.SmtpServer = "10.66.236.54"; SmtpMail.Send(mail); return "Sent"; } catch (Exception e) { return "error"; }
在应用程序中,我们在正文中添加了大量格式。如果您愿意,也可以选择如下所示的方式:
string sBody = "<table><tr><td colspan ='2'>Dear " + sSenderName + "," + "</td></tr>" + "<tr><td colspan ='2'> </td></tr>" + "<tr><td colspan ='2'>" + "The details of the Item is shown in the table." + "</td></tr>" + "<tr><td colspan ='2'> </td></tr>" + "<tr><td><font color = green>Date Raised </td><td>: </font>" + sDateRaised + "</td>" + "</tr>" + "<br>" + "<tr><td><font color = green>Index </td><td>: </font>" + sIndex + "</td>" + "</tr>" + "<br>" + "<tr><td><font color = green>Description </td><td>: </font>" + sDescription + "</td></tr>" + "<br>" + "<br>" + "<tr><td><font color = green>Priority </td><td>: </font>" + sPriority + "</td>" + "</tr>" + "<br>" + "<tr><td><font color = green>Status </td><td>: </font>" + sStatus + "</td>" + "</tr>" + "<br>" + "<tr><td><font color = green>Status Comments </td><td>: </font>" + sStausComments + "</td>" + "</tr>" + "<br>" + "<tr><td colspan ='2'>Thanks," + "</td></tr>" + "<tr><td colspan ='2'>Sushant Joshi." + "</td></tr>" + "</table>";
- 在下一步中,我们创建 Windows 窗体并创建所有字段。
- 之后,我们需要创建 Web 服务的代理。
要创建代理,您需要打开 Microsoft Visual Studio 命令提示符并运行以下命令:wsdl /language:C# /out:MyProxyClass.cs ttp:///ASP.NET/MyWebService.asmx
有关创建 Web 代理的详细信息,请访问此处。
- 在最后一步中,我们将代理添加到 Windows 窗体项目或(在多层应用程序中)任何业务逻辑层项目。
之后,我们可以调用 Web 服务的各个 Web 方法。调用邮件功能如下所示:Service1 MYCLS = new Service1(); MYCLS.SendMail(sSenName, sDateRaised, sIndex, sDescription, sPriority, sStatus, sStausComments);
最后,整个通信流程如下所示:

Windows 窗体弹出窗口(显示输入字段)

Windows 窗体弹出窗口(显示输入字段)以及 Web 服务页面

关注点
通过 Windows 应用程序向用户发送电子邮件,可以通过为少量用户启用每台机器上的 SMTP 来完成。但是,对于大型用户群,我们使用 Web 服务/远程调用来发送电子邮件,这只需要在一台机器上启用 SMTP,并且可能是一个更优选的选项。
历史
- 2009 年 9 月 15 日:初始发布