从.Net App发送电子邮件(带附件)而无需打开桌面邮件软件或浏览器?

时间:2012-01-15 02:40:37

标签: c# .net

我正在编写一个WPF(C#)应用程序,它接收用户的反馈并通过电子邮件发送。

我希望我的程序将此邮件发送到固定地址,而不使用任何桌面邮件软件(Outlook Express或Microsoft Outlook或Windows Mail或任何其他)&无需打开任何浏览器窗口。

实际上我想发送它们未被发现。这意味着用户不应该知道发送邮件。 (这是一个可以忽略的可选要求。)

有人告诉我该怎么做。提前谢谢。

5 个答案:

答案 0 :(得分:2)

作为框架提供的标准System.Net.Mail.SmtpClient类的替代方法,您可以使用类似DnSmtp的内容。它允许您的应用程序直接发送电子邮件,而无需配置SMTP服务器(它嵌入所有SMTP服务器'魔术')。如果这真的需要隐形运行(假设没有用户配置或不需要硬编码值)那么这可能是一个值得的选择。

答案 1 :(得分:1)

你一定要尝试使用

using System.Net.Mail;

这是一种可用于执行此操作的方法:

    /// <summary>
    /// Send an Email
    /// </summary>
    /// <param name="host">Example: smtp.gmail.com</param>
    /// <param name="port">Port to send email</param>
    /// <param name="from">Example: Email@gmail.com</param>
    /// <param name="password">Password</param>
    /// <param name="toList">List of people to send to</param>
    /// <param name="subject">Subject of email</param>
    /// <param name="messsage">Meddage of emial</param>
    /// <param name="deliveryMethod">Deliever type</param>
    /// <param name="isHtml">Is email HTML</param>
    /// <param name="useSSL">Is email SSL</param>
    /// <param name="ccList">List of people to cc</param>
    /// <param name="atachmentList">List of attachment files</param>
    public void SendMessage(string host, int port, string from, string password, List<string> toList, string subject, string messsage,
        SmtpDeliveryMethod deliveryMethod, bool isHtml, bool useSSL, List<string> ccList, List<string> atachmentList)
    {
        try
        {
            SmtpClient smtpClient = new SmtpClient(host);
            smtpClient.DeliveryMethod = deliveryMethod;
            smtpClient.Port = port;
            smtpClient.EnableSsl = useSSL;
            if (!string.IsNullOrEmpty(password))
                smtpClient.Credentials = new NetworkCredential(from, password);

            MailMessage mailMessage = new MailMessage();
            mailMessage.From = new MailAddress(from);
            mailMessage.Subject = subject;
            mailMessage.IsBodyHtml = isHtml;
            mailMessage.Body = messsage;

            if (toList != null)
            {
                for (int i = 0; i < toList.Count; i++)
                {
                    if (!string.IsNullOrEmpty(toList[i]))
                        mailMessage.To.Add(toList[i]);
                }
            }

            if (ccList != null)
            {
                for (int i = 0; i < ccList.Count; i++)
                {
                    if (!string.IsNullOrEmpty(ccList[i]))
                        mailMessage.CC.Add(ccList[i]);
                }
            }

            if (atachmentList != null)
            {
                for (int i = 0; i < atachmentList.Count; i++)
                {
                    if (!string.IsNullOrEmpty(atachmentList[i]))
                        mailMessage.Attachments.Add(new Attachment(atachmentList[i]));
                }
            }

            try
            {
                smtpClient.Send(mailMessage);
            }

            catch
            {
            }
        }
        catch
        {
        }
    }

我只是通过尝试捕获所有内容并进行最小的错误检查。 Hovere,这是我希望找到的解决方案。

答案 2 :(得分:0)

您可以使用System.Net.Mail命名空间。

SmtpClient topic in MSDN就是如何做到这一点的一个很好的例子。

这将要求您在应用程序中嵌入SMTP服务器名称或地址,并且此电子邮件发送很容易被公司或ISP策略阻止(即某些ISP仅允许对其特定SMTP服务器的请求,很大程度上阻止或控制垃圾邮件)。

答案 3 :(得分:0)

您可以使用Chilkat之类的库,也可以使用system.net.mail使用this内置的.Net内容连接到SMTP服务器。

如果您的客户端正在运行防病毒程序,这将被阻止,但如果您使用google,则有很多方法可以解决这个问题。

答案 4 :(得分:0)

如果您通过Exchange 2010服务器发送电子邮件,那么您还有另一个选项,在Exchange 2010中,它提供了一项Web服务,可以让您完全控制邮箱。

您可以从Exchange server SDK

下载SDK