2009-10-04 34 views
34

Tôi đang trong quá trình viết ứng dụng gửi thư qua ID người dùng và mật khẩu Gmail hợp lệ.Kết nối với smtp.gmail.com qua dòng lệnh

Tôi chỉ muốn mô phỏng kết nối SMTP trên dòng lệnh Windows XP của mình và khi tôi telnet smtp.gmail.com tại cổng 465 - Tôi không thấy bất kỳ điều gì. Cửa sổ lệnh trống có tiêu đề Telnet smtp.gmail.com mở bằng con trỏ. Khi tôi nhập các lệnh bắt tay SMTP thông thường EHLO hoặc thông thường, lời nhắc chỉ đóng lại.

Tôi không thể tìm ra điều gì đang xảy ra và ở đâu. Tôi đã thử kết nối với 587, nó không kết nối trong telnet cả. Bất cứ ai có thể vui lòng làm rõ nếu tôi làm điều gì sai?

+0

Xem thêm: http://stackoverflow.com/a/36296872/59087 –

Trả lời

4

Gmail yêu cầu liên lạc SMTP với máy chủ của họ phải được mã hóa. Mặc dù bạn đang mở một kết nối với máy chủ của Gmail trên cổng 465, rất tiếc là bạn sẽ không thể liên lạc với máy chủ đó bằng văn bản rõ ràng vì Gmail yêu cầu bạn sử dụng mã hóa STARTTLS/SSL cho kết nối.

+1

như vậy là không có cách nào tôi có thể làm điều đó từ dòng lệnh? – Abhishek

2

Kiểm tra bài đăng này trong lifehacker: Geek to Live: Back up Gmail with fetchmail. Nó sử dụng một chương trình dòng lệnh. Kiểm tra xem nó có giúp ích không. BTW tại sao bạn sử dụng dòng lệnh khi có nhiều lựa chọn thay thế tốt khác?

+1

Hey Shoban, tôi chỉ đang cố gắng tìm hoặc viết một kịch bản hành động gửi thư để sử dụng nó trong ứng dụng flex của tôi – Abhishek

5

Hãy thử điều này:

telnet smtp.gmail.com 587 
+7

Vậy thì sao? Bạn làm nghề gì? – trusktr

+9

Nó được nêu trong câu hỏi rằng cổng 587 không hoạt động và anh ta đã thử những gì bạn đang cung cấp ở đây. Bạn đang mang lại không có gì có giá trị trong chủ đề này. –

+1

Được bỏ phiếu vì không hữu ích và không giải thích về việc cần làm sau đó. – Archibald

7

Đối với thiết bị đầu cuối OSX':

openssl s_client -connect smtp.gmail.com:25 -starttls smtp 
42

Sử dụng Linux hoặc OSX, làm những gì Sorin khuyến cáo nhưng sử dụng cổng 465 để thay thế. 25 là cổng SMTP chung, nhưng không phải là những gì GMail sử dụng. Ngoài ra, tôi không tin bạn muốn sử dụng -starttls smtp

openssl s_client -connect smtp.gmail.com:465 

Bạn sẽ nhận được rất nhiều thông tin về phiên SSL và phản ứng:

220 mx.google.com ... 

Gõ vào HELO và bạn sẽ nhận được :

250 mx.google.com at your service 

Từ đó không đơn giản như gửi thư SMTP vì Gmail có bảo vệ tại chỗ để đảm bảo bạn chỉ gửi email xuất hiện từ tài khoản thực sự là belon g với bạn. Thay vì nhập "Helo", hãy sử dụng "Ehlo". Tôi không biết nhiều về SMTP nên tôi không thể giải thích sự khác biệt, và không có thời gian để nghiên cứu nhiều. Có lẽ ai đó có nhiều kiến ​​thức hơn có thể giải thích.

Sau đó, gõ "auth đăng nhập" và bạn sẽ nhận được những điều sau đây:

334 VXNlcm5hbWU6 

Đây thực chất là từ "Tên đăng nhập" mã hóa trong cơ sở 64. Sử dụng một cơ sở 64 encoder như this one, mã hóa sử dụng của bạn và nhập tên. Làm tương tự cho mật khẩu của bạn, được yêu cầu tiếp theo. Bạn sẽ thấy:

235 2.7.0 Accepted 

Và đó là nó, bạn đã đăng nhập.

Có một sự kỳ quặc khác cần khắc phục nếu bạn đang sử dụng các thiết bị đầu cuối OSx hoặc Linux. Chỉ cần nhấn phím "ENTER" không rõ ràng dẫn đến một CRLF mà SMTP cần phải kết thúc một tin nhắn. Bạn phải sử dụng "CTRL + V + ENTER". Vì vậy, điều này sẽ trông giống như sau:

^M 
.^M 
250 2.0.0 OK 
+3

Đối với osx ít nhất, bạn có thể thêm "-crlf" vào kết nối 'openssl' ban đầu để làm cho nó hoạt động độc đáo với RETURNS. ví dụ. openssl s_client -connect smtp.gmail.com: 465 -crlf –

+2

Đó là gần hai năm kể từ khi bạn đăng này, nhưng thực sự đó là một câu trả lời tuyệt vời. Cảm ơn! – Greg0ry

+1

Vẫn hoạt động như một sự quyến rũ. Nếu chỉ có Gmail ngu ngốc đã không yêu cầu tôi đăng nhập bằng cách sử dụng trình duyệt web của tôi từ máy chủ của tôi, nơi tôi chỉ có một giao diện điều khiển; /. – Reinmar

2

tcp/465 ban đầu được dành cho việc thiết lập SSL (và mới hơn TLS) lớp đầu tiên, và bên trong làm cleartext hoặc các giao thức cũ đồng bằng (smtp đây)

tcp/587 được dự định thay thế cho cổng tcp/25 mặc định ban đầu khi các kẻ gửi spam và các cuộc tấn công gửi thư hàng loạt bắt đầu từ một thập kỷ trở lên, nhưng cũng trong những thời đại AOL khét tiếng, khi một số ISP buồn cười có một số khối trên cổng mặc định. vì tcp/25) đã từ chối khách hàng của mình (AOL) để gửi email/spam hàng loạt, nhưng khách hàng AOL cần phải sử dụng các tài khoản thư và nhà cung cấp dịch vụ thư khác vẫn cần gửi thư từ AOL-internet connec tions, do đó, họ vẫn có thể kết nối với tcp/587 và làm smtp đơn giản trên nó trở lại sau đó.

Thỏa thuận với cách STARTTLS để thực hiện smtp là sử dụng hai cổng thuần văn bản gốc tcp/25 và tcp/587, và chỉ khi văn bản rõ ràng ban đầu kết nối thành công, sau đó BẮT ĐẦU lớp TLS (do đó STARTTLS) từ đó trở đi, có kết nối an toàn từ điểm đó trở đi.

Để gỡ lỗi những thứ này có thể thông qua các công cụ dòng lệnh, ví dụ cho cửa sổ có trình chặn dòng lệnh blat lịch sử (smtp), cho đến ngày hôm nay không thể thực hiện TLS (STARTTLS). -text smtp để gửi thư của nó.

http://www.blat.net/

Sau đó, có rất nhiều dự án phần mềm mã nguồn phần mềm miễn phí và mở rằng có nhiều khả năng và tính năng, chẳng hạn như

smtp khách hàng: mailsend @ googlecode http://code.google.com/p/mailsend/

smtp khách hàng: msmtp @ SourceForge (liên quan đến mpop bên dưới) http://msmtp.sourceforge.net/

khách hàng pop3: mpop @ sourceforge http://mpop.sourceforge.net/

0

gmail sử dụng kết nối được mã hóa. Vì vậy, ngay cả sau khi bạn thiết lập kết nối, bạn sẽ không thể gửi bất kỳ email nào. Mã hóa là một chút phức tạp để quản lý. Hãy thử sử dụng openssl thay thế.

Các chủ đề bên dưới nên Help-

How to send email using simple SMTP commands via Gmail?

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