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

Posted

技术标签:

【中文标题】如何从我的 C# 应用程序发送电子邮件?【英文标题】:How do I send an email message from my C# application? 【发布时间】:2010-09-26 20:50:16 【问题描述】:

这是我写的代码:

        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 确实返回“连接”(我不确定这是否有必要...我添加它以开始故障排除过程。)

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

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

谢谢!

-阿迪娜

【问题讨论】:

【参考方案1】:

@迈克尔:感谢您的链接。很有帮助。

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

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

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

所以它正在工作......虽然我不会声称我了解它如何以及为什么工作的一切,所以我确实希望在我将我的程序提供给其他人使用时遇到一些问题。即,使用具有 Internet 连接的程序的每个人都能够打开到我的服务器的这个 smtp 连接吗?我不知道答案......我将不得不等待,看看,并了解更多。

谢谢! :)

-阿迪娜

【讨论】:

一些 SMTP 服务器需要用户名和密码 - 这是您更改并解决问题的内容。许多 SMTP 服务器(例如我的 ISP)不需要密码,因为它们将源 IP 识别为来自其 ISP 的子区域。【参考方案2】:

目标地址是否与您的 smtp 服务器在同一主机上?如果不是,这将解释中继错误。

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

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

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

【讨论】:

【参考方案3】:

检查您的防火墙。 2525帖子开了吗?

【讨论】:

【参考方案4】:
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";
            
        



    

【讨论】:

以上是关于如何从我的 C# 应用程序发送电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

如何从我的 React Web 应用程序发送电子邮件

通过 C# 通过 Outlook 2010 发送电子邮件

从 C# 发送 html 电子邮件

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

如何使用邮件服务器和 nodejs 从我的服务器发送电子邮件

发送电子邮件 asp.net c#