这是我写的代码:
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
答案 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)
检查防火墙。 2525开放后是什么时候?
答案 3 :(得分: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";
}
}
}
}