2012-03-19 38 views
7

我想通過直接連接到smtp.gmail.com,直接從腳本發送電子郵件到Gmail電子郵件帳戶。如何在沒有身份驗證的情況下直接發送郵件到SMTP服務器?

但是,我不希望在腳本中使用gmail密碼。從我讀到的內容來看,Gmail似乎需要進行身份驗證,然後才能發送任何郵件,包括向其自己的用戶發送郵件。

我的問題是,郵件是如何從另一個SMTP服務器傳出的,因爲該SMTP服務器將不具有Gmail憑據。 Gmail是否只需要對「匿名」發件人進行身份驗證,並且由於我的腳本正在個人計算機上運行,​​因此安全性更高?這裏是python腳本我運行:

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) 

當我運行此腳本,輸出:

(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]') 

我的問題是,如何外部SMTP服務器避免這個問題?它們是否可以在本地腳本中進行復制,還是需要正確的反向DNS記錄,SPF記錄等?

回答

5

您可以使用不經認證的一些外部SMTP服務器(或本地SMTP),但發送的郵件將被谷歌的垃圾郵件過濾器捕獲,因爲味精[「從」]@ google.com,而實際的SMTP不是smtp.gmail.com

這些SMTP服務器還必須在ISP的DNS中有正確的反向區域,否則這個smtp將被谷歌阻止。

0

如果不進行身份驗證,則無法使用Gmail郵件服務器。這是一個谷歌政策。您需要輸入您的賬戶密碼。但還有另一種方法。您可以在Gmail API中使用GAE(Google App Engine)。這樣你就可以直接發送消息。

17

這是一個真正的好問題,我在線回覆。

我想直接通過腳本發送電子郵件到Gmail電子郵件帳戶,直接連接到smtp.gmail.com。

所有smpt.gmail.com首先不是它接受郵件(來自其他郵件服務器)一個郵件服務器,而是讓的Gmail用戶登陸,因此發送或檢查電子郵件。如果我們想找出接受其他郵件服務器的郵件的Gmail郵件服務器。我們可以在終端上運行下面的命令碼:

dig mx gmail.com +short

輸出:

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. 

由於gmail-smtp-in.l.google.com.具有最低值,我們把它作爲優選的mailserver

但是,我不希望腳本中包含gmail密碼。從我讀到的內容來看,Gmail似乎需要進行身份驗證,然後才能發送任何郵件,包括向其自己的用戶發送郵件。

整整用smtp.gmail.com登錄和發送/檢查電子郵件到/從各自的賬戶,因此我們要求用戶憑據。但是,我們並不需要在發送電子郵件到其郵件服務器即憑證gmail-smtp-in.l.google.com(如下所示)

我的問題是,如何在郵件從其他SMTP服務器來因爲該SMTP服務器將不具有Gmail憑據。 Gmail是否只需要對「匿名」發件人進行身份驗證,並且由於我的腳本正在個人計算機上運行,​​因此它的安全性更高?下面是Python腳本我運行:

正如我使自己從討論清楚上面我們不需要Gmail的憑據連接到Gmail的郵件服務器,但是如果我們連接到Gmail的郵件服務器使用個人電腦,我們可以通過發送一些電子郵件逃脫,但發送更多的電子郵件,我們需要使用DKIM,SPF等建立域名聲譽和問責制(這是一個完全不同的頻譜)。

下面的python腳本在沒有驗證的情況下將電子郵件發送到gmail帳戶。

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() 

或者嘗試的Telnet片斷

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

這裏 「25」 代表了什麼? @MaK – 2015-11-30 09:14:30

+0

25是SMTP端口,用於與郵件服務器進行通信。 https://en.m.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol – MaK 2015-12-01 11:48:43

+0

是@Mak,但它是靜態的嗎?或動態?他們的任何端口是否可用? – 2015-12-08 14:30:35

相關問題