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

6

这是我写的代码:

        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)[MY LOCAL IP]:3045当前不允许中继。”

connectAccess.Access确实返回“Connect”(我不确定这是否必要...我添加它是为了开始故障排除过程。)

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

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

谢谢!

- Adeena

4个回答

7

@ Michael: 谢谢你提供的链接,非常有帮助。

认为我已经解决了我的问题。在创建“client”对象后,我确实需要添加登录凭据。我添加了以下行:

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

抱歉 - 我有这样的习惯,在通过网络和手册搜索答案两个小时后,我最终崩溃并发布问题,然后在5分钟内解决它。 :) 我认为写下问题的行为比其他任何事情都更有帮助。
所以它正在起作用...尽管我不会声称我完全理解它是如何工作的,因此我预计在将我的程序提供给他人使用时会遇到一些问题。即:使用具有互联网连接的所有人是否都能打开与我的服务器的smtp连接?我不知道答案...我必须等待、观察和学习更多。
谢谢! :)
-Adeena

有些SMTP服务器需要用户名和密码 - 这就是你更改并解决问题的原因。许多SMTP服务器,例如我的ISP,不需要密码,因为它们将源IP识别为来自其ISP的子区域。 - configurator

3

目标地址是否与您的SMTP服务器位于同一主机上?如果不是,这可能会解释一个中继错误。

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

如果它们是同一主机,请问您是否有其他直接发送邮件的方法?

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


0

检查你的防火墙。2525端口是否开放?


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



    }
}

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