2012-03-19 68 views
7

Tôi muốn gửi email trực tiếp từ tập lệnh đến tài khoản email Gmail, bằng cách kết nối trực tiếp với smtp.gmail.com.Cách gửi thư trực tiếp đến máy chủ SMTP mà không cần xác thực?

Tuy nhiên, tôi không muốn có mật khẩu gmail trong tập lệnh. Từ những gì tôi đã đọc, có vẻ như Gmail yêu cầu xác thực trước khi nó sẽ gửi bất kỳ thư nào, bao gồm cả cho người dùng riêng của mình.

Câu hỏi của tôi là, thư đến từ máy chủ SMTP khác được phân phối như thế nào, vì máy chủ SMTP đó sẽ không có thông tin đăng nhập Gmail. Gmail chỉ yêu cầu xác thực cho người gửi "ẩn danh" và vì tập lệnh của tôi đang chạy trên máy tính cá nhân, nó có phải bảo mật cao hơn không? Đây là kịch bản python Tôi đang chạy:

import smtplib 
import email 
msg = email.message.Message() 
msg["From"] = "[email protected]" 
msg["To"] = "[email protected]" 
msg["Subject"] = "Test message" 
server = smtplib.SMTP("smtp.gmail.com",587) 
server.starttls() 
server.ehlo_or_helo_if_needed() 
try: 
    failed = server.sendmail("[email protected]","[email protected]", msg.as_string()) 
    server.close() 
except Exception as e: 
    print(e) 

Khi tôi chạy kịch bản này, đầu ra là:

(530, b'5.5.1 Authentication Required. Learn more at 
5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 fw5sm21125889wib.0', '[email protected]') 

Câu hỏi của tôi là, làm thế nào để các máy chủ SMTP bên ngoài tránh vấn đề này? Và là bất cứ điều gì họ làm bản sao trong một kịch bản địa phương, hoặc không yêu cầu bản ghi DNS đảo ngược chính xác, bản ghi SPF, vv?

Trả lời

5

Bạn có thể sử dụng một số máy chủ bên ngoài SMTP mà không cần chứng thực (hoặc một SMTP cục bộ), nhưng các tin nhắn gửi sẽ bị bắt bởi bộ lọc spam của Google vì msg [ "Từ"]@ google.com, trong khi SMTP thực tế không phải là smtp.gmail.com.

Các máy chủ SMTP đó cũng phải có vùng đảo ngược chính xác trong DNS của ISP và nếu không, smtp này sẽ bị chặn bởi google.

0

Bạn không thể sử dụng gmail smtp-server mà không cần xác thực. Đó là một chính sách của google. Bạn cần nhập mật khẩu tài khoản của mình. Nhưng có một cách khác. Bạn có thể sử dụng GAE (Google App Engine) với API Gmail. Bằng cách này, bạn có thể gửi tin nhắn trực tiếp.

17

Đó là câu hỏi thực sự hay và tôi đang trả lời nội tuyến.

Tôi muốn gửi email trực tiếp từ tập lệnh đến tài khoản email Gmail, bằng cách kết nối trực tiếp với smtp.gmail.com.

Trước hết smpt.gmail.com không phải là một mailserver mà chấp nhận mail (từ mailservers khác), nhưng thay vì cho phép Gmail người dùng để đăng nhập và do đó gửi hoặc kiểm tra email. Nếu chúng ta muốn tìm ra các mailmail của Gmail chấp nhận mail từ các mail server khác.Chúng tôi có thể chạy cmd sau trên thiết bị đầu cuối:

dig mx gmail.com +short

đầu ra:

10 alt1.gmail-smtp-in.l.google.com. 
40 alt4.gmail-smtp-in.l.google.com. 
5 gmail-smtp-in.l.google.com. 
30 alt3.gmail-smtp-in.l.google.com. 
20 alt2.gmail-smtp-in.l.google.com. 

Kể từ gmail-smtp-in.l.google.com. đã giá trị thấp nhất của chúng ta sử dụng nó như là ưa thích mailserver

Tuy nhiên, tôi không muốn có mật khẩu gmail trong tập lệnh. Từ những gì tôi đã đọc, có vẻ như Gmail yêu cầu xác thực trước khi nó sẽ gửi bất kỳ thư nào, bao gồm cả cho người dùng riêng của mình.

Đúng một sử dụng smtp.gmail.com để đăng nhập và gửi/kiểm tra email đến/từ các tài khoản tương ứng của họ, do đó chúng tôi yêu cầu thông tin người dùng. Tuy nhiên chúng ta không cần thông tin về việc gửi email đến mail server của nó tức là gmail-smtp-in.l.google.com (Ví dụ dưới đây)

Câu hỏi của tôi là, làm thế nào được email đến từ một máy chủ SMTP đã từng được phân phối, vì máy chủ SMTP đó sẽ không có thông tin đăng nhập Gmail. Gmail chỉ yêu cầu xác thực cho người gửi "ẩn danh" và vì tập lệnh của tôi đang chạy trên máy tính cá nhân, nó có phải bảo mật cao hơn không? Đây là kịch bản python Tôi đang chạy:

Như tôi đã làm bản thân mình rõ ràng từ cuộc thảo luận ở trên, chúng tôi không cần chứng chỉ Gmail để kết nối với máy chủ mail Gmail, tuy nhiên nếu chúng ta kết nối với máy chủ mail Gmail bằng cách sử dụng máy tính cá nhân, chúng tôi có thể lấy đi một vài email, nhưng để gửi nhiều email hơn, chúng tôi cần xây dựng uy tín và trách nhiệm của miền bằng cách sử dụng DKIM, SPF v.v. (Đó là một phổ khác nhau).

Tập lệnh python sau gửi email đến tài khoản gmail mà không cần xác thực.

import smtplib 

fromaddr = '[email protected]' 
toaddrs = ['[email protected]'] 
msg = ''' 
    From: {fromaddr} 
    To: {toaddr} 
    Subject: testin'  
    This is a test 
    . 
''' 

msg = msg.format(fromaddr =fromaddr, toaddr = toaddrs[0]) 
# The actual mail send 
server = smtplib.SMTP('gmail-smtp-in.l.google.com:25') 
server.starttls() 
server.ehlo("example.com") 
server.mail(fromaddr) 
server.rcpt(toaddrs[0]) 
server.data(msg) 
server.quit() 

Hoặc thử Telnet sau đoạn mã

telnet gmail-smtp-in.l.google.com 25 

HELO sendingdomain.com 

MAIL FROM:<[email protected]> 

RCPT TO:<[email protected]> 

DATA 
From: <[email protected]> 
To: <[email protected]> 
Subject: Just a test email 

The body of the mail goes here.   
. 

QUIT 
+0

đây "25" đại diện cho những gì? @MaK –

+0

25 là cổng SMTP, được sử dụng để liên lạc với các máy chủ thư. https://en.m.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol – MaK

+0

có @Mak nhưng có tĩnh không? hoặc năng động? là bất kỳ cổng nào của họ có sẵn? –

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