如何使用C#发送邮件

5

我有一些代码,

 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 Dir和队列目录中也会收到一些邮件……这意味着什么?

我发现只能将邮件发送到gmail帐户……为什么?


可能是防火墙/杀毒软件阻止了它,来自您的计算机、服务器或两者都有可能。如果您使用相同的参数配置Outlook会发生什么? - Nate
我不认为“localhost”是您的SMTP服务器的名称。 - David Brunelle
你们的网络中是否有任何防火墙限制等? - abmv
1
这可能有所帮助:http://www.systemwebmail.com/faq/4.4.7.aspx - Andy Johnson
1
正如我在帖子中所说的那样,在badmail和queue文件夹中通常会有描述,告诉你为什么它们没有被发送。也许你可以发现并发布它,这样我们可以更准确地帮助你。 - Justen
显示剩余5条评论
7个回答

2

正如其他人所提到的,您的代码很好,最有可能是SMTP配置中的某些问题,或者您发送测试电子邮件的电子邮件客户端将其标记为垃圾邮件。如果是垃圾邮件,那么很容易找出原因。 如果是电子邮件本身的问题,您可以转到邮件根文件夹,那里会有一些带有电子邮件文件和描述的文件夹。查看BadMail文件夹或队列文件夹中是否有任何内容,并在记事本中打开它们,查看未发送原因的错误信息。


1
确定错误是什么:
try
{
 SmtpMail.Send(oMailMessage);
}
catch (Exception ex)
{
//breakpoint here to determine what the error is:
Console.WriteLine(ex.Message);
}

从这里开始,请编辑您的问题并包含异常详细信息。


不会的,如果我遇到错误或异常,那么在那之前就会被捕获。请看我的另一篇帖子,我已经给出了完整的编码函数。 - Red Swan

1
你好,你可以按照以下代码进行操作:

Hello you can follow the following code:

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);
       }

1

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


我已经检查过了,它启用了匿名。 - Red Swan
@Lalit,你为什么这么生气?请不要大写。 - Nathan Koop
对不起,Nathann。我真的很疯狂,伙计。 - Red Swan
你可以尝试安装一个邮件客户端,并配置它使用虚拟 SMTP 服务器。你能成功发送电子邮件吗? - Andy Johnson

1

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

  1. 将代码放入try/catch块中,查看异常消息是否包含有用的数据
  2. 使用127.0.0.1而不是localhost,只是为了排除任何疯狂的问题
  3. 确保您的SMTP服务器正在运行标准端口(我认为是25)

0
你试过使用127.0.0.1而不是本地主机吗?另外,你测试过SMTP服务是否正常工作吗?点击这里link查看详细信息。

0
在虚拟 SMTP 服务器中添加中继限制和连接控制,以便不允许任何外部连接。

enter image description here


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