2009-09-29 37 views
7

Tôi không thể gửi email đến các địa chỉ tên miền bên ngoài như '[email protected]' bằng cách sử dụng mã bên dưới.Không thể gửi email đến miền bên ngoài bằng cách sử dụng SMTP

SmtpClient smtpClient = new SmtpClient(smtpMailServer); 
smtpClient.UseDefaultCredentials = true; 
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; 
smtpClient.EnableSsl = true; 

//Sending mail. 
smtpClient.Send(mailMessage); 

tôi nhận được một ngoại lệ -

Mailbox unavailable. The server response was: 5.7.1 Unable to relay for [email protected]

Nếu tôi thay đổi DeliveryMethod đến -

smtpClient.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis; 

tôi có thể gửi các email trên máy tính địa phương của tôi. Nhưng nó không thành công trên trang web sản xuất với một ngoại lệ -

Cannot get IIS pickup directory

bạn có thể vui lòng cho tôi biết phải làm gì?

+0

Điều này đã từng được giải quyết chưa? Tôi có hành vi giống hệt nhau. – Kevin

+0

tìm thấy giải pháp nào? –

Trả lời

1

Bạn thường cần phải xác thực với máy chủ thư bên ngoài bằng tên người dùng/mật khẩu. Vì bạn đang sử dụng một máy chủ bên ngoài, điều này sẽ không biết thông tin đăng nhập bạn đang chuyển. Đây có thể là vấn đề của bạn.

1

Nếu bạn tìm kiếm bản ghi MX cho địa chỉ đích (trong ví dụ của bạn, nó là asdf.com) và sau đó sử dụng nó cho thuộc tính máy chủ của SmtpClient, nó nên chấp nhận thư để gửi mà không cần xác thực vì nó dành cho người dùng cục bộ. Điều này không dễ làm vì System.Net không cung cấp một lớp DNS được quản lý có thể trả về bản ghi MX nhưng bạn có thể P/gọi mã không được quản lý để làm điều đó. Nếu không, bạn sẽ cần phải chắc chắn rằng bất cứ máy chủ SMTP nào mà bạn đang kết nối sẽ chuyển tiếp cho bạn và sau đó đặt thuộc tính Credentials của SmtpClient thành các thông tin thích hợp để kết nối với máy chủ đó. Đặt DeliveryMethod thành PickupDirectoryFromIIS vẫn chỉ ghi một tệp vào thư mục pickup của IIS để nó chỉ ghi một tệp, nó không thực hiện gửi một thực tế.

+0

+1 để biết cách hoạt động của email. Ngoài ra, hãy nhớ rằng có những thứ khác bạn có thể cần phải làm ngoài việc gửi trực tiếp đến máy chủ cho tên miền đó (tra cứu MX). Chủ yếu là do bảo vệ chống spam, có rất nhiều quy tắc trong thế giới email. Tìm kiếm trên "ID người gửi", "SPF" và "Tiêu đề người gửi SMTP" để giúp bạn bắt đầu - cho bất kỳ ai muốn đi tuyến đường này. – eselk

4

Tôi có vấn đề này và chứng thực cố định nó xem dưới đây:

 SmtpClient client = new SmtpClient(EmailServer, 25); 
     var SmtpUser = new System.Net.NetworkCredential("domain\\username", "password"); 
     client.Credentials = SmtpUser; 
     client.DeliveryMethod = SmtpDeliveryMethod.Network; 

tôi đã phải sử dụng dấu gạch chéo đôi kể từ khi một dấu gạch chéo là các ký tự thoát để sử dụng hai cho nó để làm việc.

0

Tôi gặp vấn đề này, mà tôi đã giải quyết bằng cách thêm tên miền có "* .com" làm tên miền và nhập là "từ xa", trong Trình quản lý IIS/SMTP Máy chủ/Tên miền ảo.

Mặc dù trong trường hợp của tôi, máy chủ SMTP cho phép truy cập ẩn danh.

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