2009-11-07 93 views
3

我需要發送電子郵件DIRECLTY到收件人的郵件服務器,繞過我的一端的任何MTA。我知道使用sendmail等MTA有一些很好的理由,所以我不需要那個方向的建議。我想編寫直接連接到收件人的郵件服務器的代碼。使用SMTP協議直接發送電子郵件的正確方法是什麼? (繞過我的一端MTA)

那麼,我錯過了什麼嗎?

  1. 假設目標電子郵件是[email protected]
  2. 查找domain.com的MX記錄,並選擇一個隨機的MX記錄。我們稱這個「服務器」
  3. 如果沒有MX記錄domain.com,使用「domain.com」作爲「服務器」
  4. 連接到「服務器」在端口25
  5. 將本:

HELO myserver.com
MAIL FROM: <[email protected]>
RCPT TO: <[email protected]>
DATA
主題:這是一個測試

你好, 這是一個測試消息。

退出

這在很多情況下工作。我想知道的是 - 我錯過了什麼?有沒有什麼情況會導致這種情況無效,我還得做更特別的事情?

我可以測試它嗎?如果我連接的遠程服務器顯示「可接受郵件的消息」,我可以假設它會通過嗎?

+0

我有這種感覺,你可能能夠得到超級用戶的答案,即https://superuser.com/ – davidkonrad 2018-01-09 14:31:08

回答

4

您應該被檢查預期的響應代碼每一個步驟,你當然需要從一個點開始消除消息中的行,但是是的,這就是它。

這就是所謂的直接到MX郵件,它的優點是,當用戶輸入錯誤的地址或不接受郵件並馬上通知他們時,您可以馬上知道。這對於網站註冊過程非常有用,您不希望用戶坐在附近想知道註冊郵件的去向。

但是,不幸的是,直接到MX郵件的主要用戶是垃圾郵件發送者。所以有一些垃圾郵件對策也可能會讓你受到影響。

首先,一個域可能有多個MX,希望垃圾郵件發送者使用他們通常愚蠢的軟件只嘗試第一個。如果在一個MX上交付失敗,您應該嘗試其他的。

實施ESMTP(EHLO等)也可能值得將其與質量較差的MTA(如垃圾郵件發送者使用的腳本)區分開來。我沒有任何證據表明郵件服務器在此基礎上區分他們的垃圾郵件分數,但我認爲這樣做可能是別人想到的!

更常見的問題是greylisting。如果您希望郵件到達灰名單生成的臨時失敗響應,您將不得不等待一段時間,然後嘗試連接並再次發送郵件。這會直接導致MX郵件失去一些潛在的無狀態和快速失敗優勢。

當然,如果您發送的郵件沒有上游ISP郵件中繼,無論是直接還是通過您自己的本地後綴,您都有被地址阻止的風險。如果您無法將您的反向DNS設置爲與您的HELO相匹配並且看起來不像動態分配的地址,則這種可能性會增加。

+0

如果你的郵件服務器可以檢查用戶是否存在你可以發送它「手動」,但是你的郵件服務器,所以你不必擔心找到合適的MX交付。 – 2009-11-17 11:46:50

相關問題