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

时间:2008-12-14 15:03:08

标签: c# email smtpclient mailmessage

这是我写的代码:

        MailMessage mail = new MailMessage("test@gmail.com", "me@myurl.com");

        mail.Subject = "This is a test!!";
        mail.Body = "testing...";

        SmtpPermission connectAccess = new SmtpPermission(SmtpAccess.Connect);
        System.Console.WriteLine("Access?  " + connectAccess.Access);

        SmtpClient client = new SmtpClient("mail.myurl.com", 2525);
        client.Send(mail);

它不起作用。我在“client.Send(mail)”行显示“邮箱不可用。服务器响应是(MYLOCALCOMPUTERNAME)[我的本地IP]:3045目前不允许中继通过。”

connectAccess.Access确实返回“Connect”(我不确定是否有必要......我已将其添加进入以启动故障排除过程。)

这是否意味着必须以某种方式配置我的本地计算机?当我将我的应用程序部署到其他人机器时呢?那里需要本地配置吗?我只是想从我的应用程序中创建一个“发送反馈”类型的链接。

(注意:在我的实际应用程序中,我使用的是“to”和“from”中的真实电子邮件地址,而我的smtp实际上是我托管我的网址/网站的地址的smtp地址)

谢谢!

-Adeena

4 个答案:

答案 0 :(得分:7)

@ Michael:感谢您的链接。这非常有帮助。

我想出了我的问题。在创建“客户端”对象后,我确实需要添加登录凭据。我添加了以下行:

 client.Credentials = new System.Net.NetworkCredential("myloginat+myurl.com", "mypassword");

(对不起 - 我有这个习惯,在网上搜索答案并通过我的手册2小时后,我终于分解并发布问题,然后5分钟后弄明白。:)我认为写下这个问题的行为比其他任何事都更有帮助)

所以它正在发挥作用......虽然我不会声称我理解它的工作方式和原因,但是当我将程序交给其他人使用时,我确实会遇到一些问题。即,每个使用具有互联网连接的程序的人都可以打开这个smtp连接到我的服务器吗?我不知道答案......我将不得不等待,看到,并学习更多。

谢谢! :)

-Adeena

答案 1 :(得分:3)

目标地址与smtp服务器位于同一主机上吗?如果没有,这将解释中继错误。

您使用的SMTP服务器需要是邮件的最终目的地或邮件交换中的第一个跃点。例如,如果您从gmail地址向yahoo地址发送邮件,则查看该邮件的第一个邮件服务器必须是您的gmail服务器或yahoo服务器。中间的服务器将拒绝该消息,因为它们已禁用中继(以减少垃圾邮件等)。

如果它们是同一个主机,您是否可以通过任何其他方式直接向其发送邮件?

通过telnet尝试此测试,看看您的smtp服务器是否正常运行:http://www.messagingtalk.org/content/470.html

答案 2 :(得分:0)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Mail;

namespace SendMail
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                SmtpClient client = new SmtpClient("smtp.gmail.com", 25);
                MailMessage msg = new MailMessage();

                NetworkCredential cred = new NetworkCredential("x@gmail.com", "password");
                msg.From = new MailAddress("x@gmail.com");
                msg.To.Add("y@gmail.com");
                msg.Subject = "A subject";
                msg.Body = "Hello,Raffi";

                client.Credentials = cred;
                client.EnableSsl = true;
                label1.Text = "Mail Sended Succesfully";
                client.Send(msg);


            }
            catch
            {
                label1.Text = "Error";
            }
        }



    }
}

答案 3 :(得分:0)

检查防火墙。 2525开放后是什么时候?