2009-10-13 59 views
21

Tôi đang cố thiết lập máy chủ SMTP trên IIS để gửi thư. Máy chủ SMTP dự định được sử dụng bởi mã ASP.NET trong C#.Gửi thư bằng localhost SMTP

Tôi trước đây đã sử dụng gmail smtp trong đó tôi đã cung cấp smtp.gmail.com làm máy chủ với cổng bảo mật và gmail uid/pwd của tôi. Điều đó làm việc tốt. Đây là mã được sử dụng để làm điều đó.

SmtpClient smtpClient = new SmtpClient(); 
smtpClient.UseDefaultCredentials = false; 
smtpClient.Host = "smtp.gmail.com"; 
smtpClient.Port = 587; 
smtpClient.Credentials = new NetworkCredential(uname,pwd); 
smtpClient.EnableSsl = true; 
smtpClient.Send(mailMessage); 

Bây giờ tôi đang lên kế hoạch để sử dụng máy chủ localhost SMTP trên IIS, những gì giá trị i nên được đưa ra cho các thông số UseDefaultCredentials và Credentials. Tôi sẽ gán sai cho EnableSsl vì nó ở trên cổng 25.

Ngoài ra, cấu hình máy chủ ảo SMTP đơn giản nhất có thể là gì.

Trả lời

14

Tôi nghĩ rằng trong localhost bạn có thể sử dụng:

SmtpClient smtpClient = new SmtpClient(); 
smtpClient.UseDefaultCredentials = true; 
smtpClient.Send(mailMessage); 
+0

Nó không hoạt động. Tôi gặp lỗi "Máy chủ SMTP không xác định" – lenden

+0

Bạn có bắt đầu dịch vụ SMTP SMTP không? – Natim

+0

có, nhưng nó vẫn không hoạt động (tôi có win8, nhưng như tôi hiểu, tôi đã kích hoạt mọi thứ đúng). tôi có nên viết smth như "" vào cấu hình web không? nó vẫn là "máy chủ smtp không xác định", nếu tôi chỉ viết 3 dòng này – lenden

3

Tùy thuộc vào cách bạn định cấu hình máy chủ SMTP. Bạn có thể không cần phải sử dụng bất kỳ thông tin đăng nhập nào cả, và chỉ cần cấu hình máy chủ để chỉ chấp nhận các kết nối cục bộ.

+0

@Joel: tôi thiết lập máy chủ SMTP: Xác thực: Anonymous access địa chỉ IP: All Unassigned an ninh đối ngoại: Anonymous access Tò mò, nếu đây là một cấu hình chính xác cho việc gửi mail mà không cần chứng chỉ. – pencilslate

+0

Đó là một câu hỏi cho serverfault. –

26

Khi bạn đang sử dụng các dịch vụ IIS SMTP cục bộ, thiết lập DeliveryMethod để PickupDirectoryFromIis. Ví dụ:

smtpClient.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis; 

Điều này hoàn toàn bỏ qua lớp mạng và ghi thư trực tiếp vào đĩa. Nó nhanh hơn nhiều so với giao thức SMTP chatty.

Khi bạn sử dụng đoạn mã trên, nó có nghĩa là bạn có thể thoát khỏi khu vực này của mã của bạn:

smtpClient.UseDefaultCredentials = false; 
smtpClient.Host = "smtp.gmail.com"; 
smtpClient.Port = 587; 
smtpClient.Credentials = new NetworkCredential(uname,pwd); 
smtpClient.EnableSsl = true; 
+4

Đây là câu trả lời đúng cho việc sử dụng thư mục pickup IIS cục bộ. Vì nó chỉ viết một tệp, nó sẽ không sử dụng bất kỳ thông tin đăng nhập nào cả và IIS sẽ chỉ gửi nó cho bạn. –

1

Tx Natim, những gì bạn nói làm việc cho tôi. Có ứng dụng mạng nội bộ của chúng tôi sử dụng auth tích hợp với máy chủ Exchange 2007 của chúng tôi ngay bây giờ:

Dim msg As New MailMessage() 
Dim smtp As SmtpClient 

msg.From = New MailAddress(strFrom) 
msg.To.Add(strTo) 
msg.Subject = strSubject 
msg.Body = strBody 

smtp = New SmtpClient("ServerName") 
smtp.UseDefaultCredentials = True 
smtp.Send(msg) 
2

Bạn đã thử bật chuyển tiếp chưa?

Tìm trình quản lý IIS6 (Tôi thấy rằng tìm kiếm IIS có thể trả về 2 kết quả) đi đến thuộc tính máy chủ SMTP rồi 'Truy cập' rồi nhấn nút chuyển tiếp.

Sau đó, bạn có thể chọn tất cả hoặc chỉ cho phép một số ip của như 127.0.0.1

SMTP Relay

+0

Tôi đang sử dụng CDOSYS và từ máy chủ mà máy chủ ảo này đang thiết lập email đang gửi thuận lợi, nhưng khi tôi thử tiện ích của tôi từ máy trạm, hãy nhận thông báo 'Giao thông không kết nối với máy chủ'. bất kỳ ý tưởng? những gì tôi cần phải thay đổi trong mã của tôi để máy trạm cũng sẽ có thể sử dụng máy chủ SMTP ảo này và có thể gửi email. – elmo

0

Nếu bạn muốn kiểm tra email trong localhost, chỉ cần tải cài đặt các công cụ Papercut https://papercut.codeplex.com/

và thay đổi hostname đến localhost như dưới đây. Papercut chụp tất cả các email gửi bằng localhost.

smtpClient.UseDefaultCredentials = false; 
    smtpClient.Host = "localhost"; 
    smtpClient.Port = 587; 
    smtpClient.Credentials = new NetworkCredential(uname,pwd); 
    smtpClient.EnableSsl = true; 
+0

cũng smtp4dev là một máy chủ smtp địa phương cho các nhà phát triển. – Birey

Các vấn đề liên quan