我有一个Windows窗体应用程序,我正在添加一个请求支持表单,并希望用户能够输入值并点击一个按钮。按下按钮后,我可以:
我想知道的是什么是最好的使用方法?我认为选项1是最透明的,用户将看到确切的发送内容,但我不确定如何确保无论他们使用哪种电子邮件客户端都能正常工作。
我发现选项二存在潜在问题,特别是防火墙可能会停止提交。但是选项2允许我在那时为他们提供票号以供他们请求。
感谢您的帮助。
答案 0 :(得分:2)
对于选项1,如建议的那样,使用mailto处理程序。
将字符串格式化为:string.Format("mailto:support@example.com?subject={0}&body={1}", subject, body)
。不要忘记UrlEncode主题和身体的价值。
然后将System.Diagnostics.Process.Start()与您的字符串一起使用。
这将在系统上启动已注册的邮件处理程序(Outlook,Windows Live Mail,Thunderbird等)。
答案 1 :(得分:1)
对于选项1:如果消息体很短,那么从代码中调用mailto处理程序不再需要它们使用outlook。这有点便宜,但它对本地邮件客户来说是完全跨平台的。 (如果他们使用像gmail这样的东西,你仍然是SOL,)
答案 2 :(得分:0)
选项2)是避免企业防火墙问题的最佳选择,因为HTTP端口可能不会被阻止。
选项2)是最简单的配置。您将拥有的唯一配置密钥是服务/页面网址。然后,您的SMTP配置将保留在您的网络服务器上。
现在您必须选择使用网页(如果已存在)或网络服务(最适合您的功能)。
答案 3 :(得分:0)
对于选项(1),准备处理Outlook版本问题。但这并不难(再次,如果我们谈论Outlook,最新版本)
//using Microsoft.Office.Interop.Outlook;
private void OutlookMail(string Subject, string Body)
{
ApplicationClass app = new ApplicationClass();
NameSpaceClass ns = (NameSpaceClass)app.GetNamespace("mapi");
ns.Logon("", "", true, true);
MailItem mi =
(MailItem)app.CreateItem(OlItemType.olMailItem);
mi.Subject = Subject;
int EOFPos = Body.IndexOf(char.Parse("\0"));
if (EOFPos != -1)
{
log.Error("EOF found in Mail body");
ErrorDialog ed = new ErrorDialog(TietoEnator.Common.ErrorDialog.ErrorDialog.Style.OK, "Export Error", "File could not be exported correctly, please inform responsible person", "", "EOF char detected in the body of email message.");
ed.ShowDialog();
Body=Body.Replace("\0", "");
}
mi.HTMLBody = "<html><head><META content='text/html; charset=CP1257' http-equiv=Content-Type></head><body><table>"+Body+"</table></body></html>";
mi.BodyFormat = OlBodyFormat.olFormatHTML;//.olFormatPlain;
mi.Display(0); // show it non - modally
ns.Logoff();
}
BTW用于自动支持请求我打算在我当前的项目“Microsoft Enterprise Logging Support Block”中使用电子邮件发送功能。