2013-02-02 57 views
3

我想用asp發送郵件。用System.Web.Mail發送郵件

我使用此代碼

using System.Web.Mail; 

MailMessage msg = new MailMessage(); 
msg.To = "[email protected]"; 
msg.From = "[email protected]"; 
msg.Subject = "Send mail sample"; 
msg.BodyFormat = MailFormat.Html; 
string msgBody="Hello My Friend. This is a test."; 
msg.Body = msgBody ; 
SmtpMail.SmtpServer = "localhost"; 
SmtpMail.Send(msg); 

,但我得到的錯誤:

錯誤的命令序列。服務器響應是:此郵件服務器在嘗試發送到非本地電子郵件地址時需要進行身份驗證。請檢查您的郵件客戶端設置,或與您的管理員聯繫,以驗證是否爲此服務器定義了域或地址。

如何用asp發送郵件?

+0

錯誤信息非常清楚地表明:''這個郵件服務器需要認證''。您似乎沒有提供任何身份驗證。您如何提供它取決於郵件服務器的要求。它需要什麼? – David

+1

您沒有在系統上運行的smtp服務或您無法證明無效的證書(我敢打賭前者)。 –

回答

3

我使用此代碼的答案。

MailMessage msg = new MailMessage(); 
msg.Body = "Body"; 

string smtpServer = "mail.DomainName"; 
string userName = "[email protected]"; 
string password = "MyPassword"; 
int cdoBasic = 1; 
int cdoSendUsingPort = 2; 
if (userName.Length > 0) 
    { 
    msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", smtpServer); 
    msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 25); 
    msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing", cdoSendUsingPort); 
    msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", cdoBasic); 
    msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", userName); 
    msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", password); 
    } 
    msg.To = user.Email; 
    msg.From = "[email protected]"; 
    msg.Subject = "Subject"; 
    msg.BodyEncoding = System.Text.Encoding.UTF8; 
    SmtpMail.SmtpServer = smtpServer; 
    SmtpMail.Send(msg); 
2

您可能需要提供憑據。

例如:

smtpMail.Credentials = new NetworkCredential("username", "password") 
1

如果你想發送電子郵件而無需驗證,恐怕是不可能的。如果您網站上的任何用戶可以發送電子郵件而無需密碼,那太可怕了。它將允許用戶從其他人帳戶發送電子郵件。因此,考慮安全,發送電子郵件會要求提供

var fromAddress = "";  // Email Address here. This will be the sender. 
string fromPassword = ""; // Password for above mentioned email address. 
var toAddress = "";// Receiver email address here 
string subject = "Hi"; 
string body = "Body Text here"; 
var smtp = new System.Net.Mail.SmtpClient(); 
    { 
     smtp.Host = "smtp.gmail.com"; // this is for gmail. 
     smtp.Port = 587; 
     smtp.EnableSsl = true; 
     smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network; 
     smtp.Credentials = new NetworkCredential(fromAddress, fromPassword); 
     smtp.Timeout = 20000; 
    } 
smtp.Send(fromAddress, toAddress, subject, body); 

[編輯] 對不起我的錯誤,我沒有注意到,電子郵件地址和密碼。他們都用於相同的目的。如果您使用.Net框架的更高版本(2.0或更高版本),則使用System.Net.Mail。如果您使用System.Web.Mail,它只會顯示一條警告,說這已被棄用。但那會起作用。

這裏是System.web.mail

MailMessage mail = new MailMessage(); 
    mail.To.Add("[email protected]"); 
    mail.From = new MailAddress("[email protected]"); 
    mail.Subject = "Email using Gmail"; 
    mail.Body = ""; 


    mail.IsBodyHtml = true; 
    SmtpClient smtp = new SmtpClient(); 
    smtp.Host = "smtp.gmail.com"; 
smtp.EnableSsl = true; 
smtp.Credentials = new System.Net.NetworkCredential(mail.From,"YourPassword"); 
    smtp.Send(mail); 
+1

答案是關於'System.Web.Mail'而不是'System.Net.Mail'。 –