如何从c#发送邮件

Posted

技术标签:

【中文标题】如何从c#发送邮件【英文标题】:How to send the mail from c# 【发布时间】:2011-01-08 06:31:54 【问题描述】:

我有代码,

 System.Web.Mail.MailMessage oMailMessage = new MailMessage();
            oMailMessage.From = strFromEmaild;
            oMailMessage.To = strToEmailId;
            oMailMessage.Subject = strSubject;
            oMailMessage.Body = strBody;
            SmtpMail.SmtpServer = "localhost";
            SmtpMail.Send(oMailMessage);

(所有变量都有值)

我已经安装了 SMTP 虚拟服务。为什么它无法发送电子邮件。为什么它不起作用??

编辑

public bool SendMail(string strToEmailId, string strFromEmaild, string strSubject, string strBody)

    try
    
        System.Web.Mail.MailMessage oMailMessage = new MailMessage();
        oMailMessage.From = strFromEmaild;
        oMailMessage.To = strToEmailId;
        oMailMessage.Subject = strSubject;
        oMailMessage.Body = strBody;
        SmtpMail.SmtpServer = "SERVERNAME";
        SmtpMail.Send(oMailMessage);

        return true;
     
     catch (Exception ex)
     
         return false;
     
 

我有这个代码。它执行良好并且返回 true,但我没有在收件箱中收到任何电子邮件。

还有什么问题?

在 C:\Inetpub\mailroot\Badmail 的 BadMail 目录中获取一些邮件,也在队列目录中获取一些邮件...这是什么意思..??

我发现邮件只能发送到gmail帐户...为什么会这样?

【问题讨论】:

可能是防火墙/防病毒软件阻止了它,从您的机器或服务器,或两者兼而有之。如果您使用相同的参数配置 Outlook,会发生什么? 我不认为“localhost”是您的 smtp 服务器的名称 您的网络等是否有任何防火墙限制等? 这可能会有所帮助:systemwebmail.com/faq/4.4.7.aspx 正如我在帖子中所说,死信和队列文件夹中的这些文件中通常会有说明,告诉您为什么没有发送它们。也许发布您发现的内容,我们可以更准确地为您提供帮助.. 【参考方案1】:

在虚拟smtp服务器中添加中继限制和连接控制,使外部连接不被允许

【讨论】:

【参考方案2】:

您好,您可以按照以下代码:

try
        
            SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
            client.EnableSsl = true;
            client.Timeout = 100000;
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            client.Credentials = new NetworkCredential("your gmail id", "password");
            MailMessage msg = new MailMessage();
            msg.To.Add(textBoxTo.Text);
            msg.From = new MailAddress("your gmail id");
            msg.Subject = textBoxSubject.Text;
            msg.Body = textBoxMsg.Text;
            Attachment data = new Attachment(textBoxAttachment.Text);
            msg.Attachments.Add(data);
            client.Send(msg);
            MessageBox.Show("Successfully Sent Message.");
        
        catch (Exception ex)
        
            MessageBox.Show(ex.Message);
       

【讨论】:

【参考方案3】:

正如其他人所提到的,您的代码很好,很可能是您的 SMTP 配置中的某些内容,或者您​​发送测试电子邮件的电子邮件客户端将它们标记为垃圾邮件。如果是垃圾邮件,那很容易弄清楚。 如果它与电子邮件有关,您可以转到您的 mailroot 文件夹,那里将有一些文件夹,其中包含电子邮件文件和描述。查看 BadMail 文件夹或队列文件夹中是否有任何内容,然后在记事本中打开它们并查看给出了哪些错误说明为什么它们没有发送。

【讨论】:

【参考方案4】:

您的程序在功能上似乎没有任何问题。这可能是您的程序和邮件服务器之间的配置问题。我会尝试以下方法来诊断问题。

    将代码包装在 try/catch 块中,查看异常消息是否包含有用数据 使用 127.0.0.1 而不是 localhost 只是为了排除任何疯狂的情况 确保您的 SMTP 服务器在标准端口(我相信是 25)上运行

【讨论】:

【参考方案5】:

很难说,但一种可能是您没有在 SMTP 虚拟服务器上启用匿名访问。转到虚拟服务器属性对话框,选择访问选项卡,单击访问控制按钮,并确保启用匿名访问。

【讨论】:

我已经检查过了,它是匿名启用的 @Lalit,你为什么这么生气?请不要大写。 对不起,nathann.. 真的我疯了伙计 您可以尝试安装电子邮件客户端并将其配置为使用虚拟 smtp 服务器。你可以使用它成功发送电子邮件吗?【参考方案6】:

您是否尝试过 127.0.0.1 而不是 Localhost? 您还测试过 SMTP 服务是否正常工作,请查看此link 了解详细信息。

【讨论】:

【参考方案7】:

确定错误是什么:

try

 SmtpMail.Send(oMailMessage);

catch (Exception ex)

//breakpoint here to determine what the error is:
Console.WriteLine(ex.Message);

请在此处使用该异常详细信息编辑您的问题。

【讨论】:

不...如果我遇到错误或异常,那么这将在 .. 之前捕获。请参阅我的另一篇文章。我已经给出了我的全部编码功能。

以上是关于如何从c#发送邮件的主要内容,如果未能解决你的问题,请参考以下文章

如何从我的 C# 应用程序发送电子邮件?

通过 C# 网页发送大量电子邮件的最佳方式是啥?

从 C# 发送 html 电子邮件

从c#代码发送电子邮件[重复]

C# 如何配置公司邮箱发送邮件配置

从 C# 发送 Mandrill 电子邮件