2011-12-28 40 views
9

Tôi đang cố gắng để gửi email qua Amazon SES dịch vụ SMTP mới sử dụng .NET được xây dựng-in SmtpClientgửi email thông qua lỗi Amazon SES SMTP

Code:

var emailClient = new SmtpClient("email-smtp.us-east-1.amazonaws.com", 465); 
        emailClient.EnableSsl = true; 
.... 
emailClient.Send(message); 

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

Không thể đọc dữ liệu từ kết nối giao thông: net_io_connectionclosed

Google cho biết lỗi này có nghĩa là tôi không thể kết nối với máy chủ SMTP. Chúng yêu cầu TLS mà tôi tin tưởng đạt được bằng thuộc tính "EnableSsl".

Mọi người đều biết cách tôi cần chỉnh sửa mã của mình để mã hoạt động?

EDIT:

Tôi đoán tôi sẽ đóng câu hỏi này. Không, nó không thể làm những gì tôi muốn với SmtpClient

https://forums.aws.amazon.com/thread.jspa?messageID=302112&#302112

+0

Không trực tiếp trả lời câu hỏi, nhưng bạn có thể tải xuống AWSSDK.dll và sử dụng API của riêng mình, nó thực sự cực kỳ dễ dàng và bạn không cần phải lo lắng về SMTP, khả năng tương thích, ISP, v.v. –

+1

Đó là những gì tôi đang sử dụng ngay bây giờ. Nhưng tôi muốn làm SMTP kể từ khi họ phát hành nó gần đây. Bằng cách đó tôi không phải đối phó với AWSSDK – katit

+0

Bạn có cung cấp tên người dùng và mật khẩu SES của mình ở bất kỳ đâu không? – arx

Trả lời

5

tôi có thể xác nhận rằng nó hoạt động với STARTTLS và cổng 587.

Hy vọng rằng sẽ giúp

+0

:(Tôi vừa thử nghiệm ngay bây giờ và chỉ có 2587 hoạt động với SmtpClient mặc định. Ít nhất nó hoạt động sau một giờ thử các cổng khác nhau ... – kape123

+1

Liên kết của bạn bị hỏng. Bạn nên thay thế hoặc xóa nó –

0

Bạn đã thiết defaultCredentials = "false" trong web.config?

+0

Tôi rất tò mò về ý nghĩa của bạn hoặc lý do tại sao điều này sẽ hoạt động: bạn đang giả định rằng một ứng dụng web ASP.NET đang được phát triển, nhưng tại sao một số thông tin đăng nhập trong web.config ảnh hưởng đến Kết nối SMTP? –

+0

Xin lỗi vì bất kỳ sự nhầm lẫn nào nếu tôi hiểu sai ý nghĩa của "tệp cấu hình", mà tôi giả định là Web.config có cài đặt SMTP được liên kết. Khi tôi đã sử dụng (.NET) SMTP và cần thiết để cung cấp một tên người dùng và mật khẩu, tôi đã làm như vậy trong phần . Nếu tôi không đặt defaultCredettials = false, kết nối sẽ thất bại. –

5

Theo Amazon - nó không được hỗ trợ như chúng tôi đã từng sử dụng.

https://forums.aws.amazon.com/thread.jspa?messageID=302112&#302112

.NET email TLS thư viện chỉ hỗ trợ STARTTLS mà SES không hỗ trợ ngày hôm nay. Chúng tôi hỗ trợ những gì được gọi là "TLS Wrapper" hoặc xác thực SMTPS . Tôi có thể hiểu điều này sẽ gây phiền toái như thế nào, nhưng bạn có thể sử dụng OpenSSL như một giải pháp và đường hầm thông qua phần mềm đó chạy trên máy tính của bạn để sử dụng .NET để chương trình chống lại điểm cuối SMTP của chúng tôi.

1

Đối với bất kỳ ai muốn gửi bình thường .Net SMTPClient. Nó có thể là bạn chỉ cần một wrapper.

Dưới đây là một liên kết với tất cả các thông tin:

http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/SMTP.Client.html

Cài đặt phần mềm đào hầm và cấu hình như mô tả trong các liên kết sau đó nó đơn giản như:

System.Net.Mail.SmtpClient sc = new SmtpClient(); 
sc.Host = host; 
sc.Port = port; 
sc.Credentials = new NetworkCredential(username, password); 
sc.Send(mm); 
8

Có thể làm điều này bằng cách chỉ định cổng 587.

<system.net> 
    <mailSettings> 
    <smtp deliveryMethod="Network"> 
     <network enableSsl="true" port="587" host="email-smtp.us-east-1.amazonaws.com" password="[password]" userName="[username]"/> 
    </smtp> 
    </mailSettings> 
</system.net> 

Cùng với đó là các cấu hình, bạn có thể sử dụng SmtpClient như bình thường

var client = new SmtpClient(); 
var message = new MailMessage(fromemail, recipient, subject, body); 
client.Send(message); 
+0

Tôi đoán nó vừa được thêm vào. Bạn có thể đăng liên kết tới tài liệu Amazon SES nơi họ xác nhận hỗ trợ cho cổng 587 không? – katit

+0

Tôi có một tình huống là cùng một cấu hình hoạt động trên windows 7 nhưng không phải trên windows xp. Bất kỳ ý tưởng tại sao? –

+0

@katit: Đây là thông báo chính thức: http://aws.amazon.com/de/about-aws/newsletters/2012/03/15/March2012/ Xem bài đăng trên blog trong câu trả lời của tôi để biết thêm thông tin – Masterfu

3

Bây giờ SES hỗ trợ STARTTTLS:

Outgoing Server (SMTP) -25, 587, hoặc 2587 (để kết nối bằng STARTTLS), hoặc 465 hoặc 2465 (để kết nối bằng TLS Wrapper). liên kết

Pruf: http://s3.amazonaws.com/awsdocs/ses/latest/ses-dg.pdf

+0

Đối với tôi chỉ có cổng 587 làm việc với SmtpClient. – swax

4

Như masterfu đề cập đến trong bài viết trên blog của mình, Amazon SES bắt đầu STARTTLS hỗ trợ vào tháng 3 năm 2012.

Dưới đây là mã mà tôi đã sử dụng để nhận SMTP làm việc với Amazon.

string username = ConfigurationManager.AppSettings["AWSSMTPUser"]; 
    string password = ConfigurationManager.AppSettings["AWSSMTPPass"]; 

    SmtpClient smtp = new SmtpClient(); 
    smtp.Host = "email-smtp.us-east-1.amazonaws.com"; 
    smtp.Port = 587; 
    smtp.UseDefaultCredentials = false; 
    smtp.Credentials = new NetworkCredential(username, password); 
    smtp.EnableSsl = true; 

    smtp.Send(mail); 
0

Thử sử dụng cổng số. 2587, cổng 25, 425, 587 dint làm việc cho trường hợp của tôi.

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