SMTPリクエストメソッド
開発者にSMTPプロトコルの配信方法を提供します。以下はセッションプロセスです。
S: 220 EngageLab Inbound Server ESMTP Haraka 2.2.4 ready
C: ehlo ifaxin.com
S: 250-EngageLab Inbound Server Hello, Haraka is at your service.
S: 250-PIPELINING
S: 250-8BITMIME
S: 250-SIZE 16000000
S: 250 AUTH LOGIN
C: AUTH LOGIN base64(api_user)
S: 334 UGFzc3dvcmQ6
C: base64(api_key)
S: 235 Authentication successful
C: mail FROM:<support@ifaxin.com>
S: 250 sender <support@ifaxin.com> OK
C: rcpt TO:<ben@ifaxin.com>
S: 250 recipient <ben@ifaxin.com> OK
C: data
S: 354 go ahead, make my day
C: ... ...
C: .
S: 250 #1426390015358_15_6484_8661.sc-10_10_127_51-inbound#Queued
C: quit
S: 221 EngageLab Inbound Server closing connection. Have a jolly good day
S: 220 EngageLab Inbound Server ESMTP Haraka 2.2.4 ready
C: ehlo ifaxin.com
S: 250-EngageLab Inbound Server Hello, Haraka is at your service.
S: 250-PIPELINING
S: 250-8BITMIME
S: 250-SIZE 16000000
S: 250 AUTH LOGIN
C: AUTH LOGIN base64(api_user)
S: 334 UGFzc3dvcmQ6
C: base64(api_key)
S: 235 Authentication successful
C: mail FROM:<support@ifaxin.com>
S: 250 sender <support@ifaxin.com> OK
C: rcpt TO:<ben@ifaxin.com>
S: 250 recipient <ben@ifaxin.com> OK
C: data
S: 354 go ahead, make my day
C: ... ...
C: .
S: 250 #1426390015358_15_6484_8661.sc-10_10_127_51-inbound#Queued
C: quit
S: 221 EngageLab Inbound Server closing connection. Have a jolly good day
このコードブロックはフローティングウィンドウ内に表示されます
注意
SMTPコールが536 Frequency limitedを返す場合、各apiuserは1分間に30,000回を超えるAPIおよびSMTPコールを行うことはできません。
SMTP統合でのラベル機能の使用
API_USERを検証する際、ラベルID(label_id)を末尾に追加します。連結ルールは以下の通りです:
api_user + '#' + label_id
ラベルを使用せずに統合する場合:
S: 250-EngageLab Inbound Server Hello, Haraka is at your service.
S: 250-PIPELINING
S: 250-8BITMIME
S: 250-SIZE 16000000
S: 250-STARTTLS
S: 250 AUTH LOGIN
C: AUTH LOGIN base64(api_user)
S: 250-EngageLab Inbound Server Hello, Haraka is at your service.
S: 250-PIPELINING
S: 250-8BITMIME
S: 250-SIZE 16000000
S: 250-STARTTLS
S: 250 AUTH LOGIN
C: AUTH LOGIN base64(api_user)
このコードブロックはフローティングウィンドウ内に表示されます
ラベルを使用して統合する場合:
S: 250-EngageLab Inbound Server Hello, Haraka is at your service.
S: 250-PIPELINING
S: 250-8BITMIME
S: 250-SIZE 16000000
S: 250-STARTTLS
S: 250 AUTH LOGIN
C: AUTH LOGIN base64(api_user + '#' + label_id)
S: 250-EngageLab Inbound Server Hello, Haraka is at your service.
S: 250-PIPELINING
S: 250-8BITMIME
S: 250-SIZE 16000000
S: 250-STARTTLS
S: 250 AUTH LOGIN
C: AUTH LOGIN base64(api_user + '#' + label_id)
このコードブロックはフローティングウィンドウ内に表示されます
Pythonコードスニペット:
# ラベルを使用せずに統合する場合:
s = SMTP('%s:%d' % (HOST, PORT))
s.set_debuglevel(DEBUG_MODE)
if USE_SSL:
s.starttls()
s.login(API_USER, API_KEY)
# ラベルを使用して統合する場合:
s = SMTP('%s:%d' % (HOST, PORT))
s.set_debuglevel(DEBUG_MODE)
if USE_SSL:
s.starttls()
s.login(API_USER + '#' + label_id, API_KEY)
# ラベルを使用せずに統合する場合:
s = SMTP('%s:%d' % (HOST, PORT))
s.set_debuglevel(DEBUG_MODE)
if USE_SSL:
s.starttls()
s.login(API_USER, API_KEY)
# ラベルを使用して統合する場合:
s = SMTP('%s:%d' % (HOST, PORT))
s.set_debuglevel(DEBUG_MODE)
if USE_SSL:
s.starttls()
s.login(API_USER + '#' + label_id, API_KEY)
このコードブロックはフローティングウィンドウ内に表示されます
埋め込み画像付きメールのSMTP送信
コード例:
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
import smtplib
class MyEmail:
def __init__(self):
self.smtp = smtplib.SMTP()
self.login_username = 'postmaster@testdomain'
self.login_password = '*****'
self.sender = 'postmaster@testdomain' # same as login_username
self.receiver = 'test123@qq.com'
self.host = 'smtp.engagelab.net'
self.port = 25
def connect(self):
self.smtp.connect(self.host)
def login(self):
self.smtp.login(self.login_username, self.login_password)
def send(self):
msg = MIMEMultipart('related')
msg['From'] = self.sender
msg['To'] = self.receiver
email_title = 'python test inline image'
msg['Subject'] = email_title
content = MIMEText('test image content <img src="cid:image1" alt="xxxxx">', 'html', 'utf-8')
msg.attach(content)
fp = open('./test.png','rb')
img = MIMEImage(fp.read())
img.add_header('Content-ID','image1') #the value of content-id is the cid in html
msg.attach(img)
self.smtp.sendmail(self.sender, self.receiver, msg.as_string())
def quit(self):
self.smtp.quit()
def send():
myemail = MyEmail()
myemail.connect()
myemail.login()
myemail.send()
myemail.quit()
if __name__ == "__main__":
send()
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
import smtplib
class MyEmail:
def __init__(self):
self.smtp = smtplib.SMTP()
self.login_username = 'postmaster@testdomain'
self.login_password = '*****'
self.sender = 'postmaster@testdomain' # same as login_username
self.receiver = 'test123@qq.com'
self.host = 'smtp.engagelab.net'
self.port = 25
def connect(self):
self.smtp.connect(self.host)
def login(self):
self.smtp.login(self.login_username, self.login_password)
def send(self):
msg = MIMEMultipart('related')
msg['From'] = self.sender
msg['To'] = self.receiver
email_title = 'python test inline image'
msg['Subject'] = email_title
content = MIMEText('test image content <img src="cid:image1" alt="xxxxx">', 'html', 'utf-8')
msg.attach(content)
fp = open('./test.png','rb')
img = MIMEImage(fp.read())
img.add_header('Content-ID','image1') #the value of content-id is the cid in html
msg.attach(img)
self.smtp.sendmail(self.sender, self.receiver, msg.as_string())
def quit(self):
self.smtp.quit()
def send():
myemail = MyEmail()
myemail.connect()
myemail.login()
myemail.send()
myemail.quit()
if __name__ == "__main__":
send()
このコードブロックはフローティングウィンドウ内に表示されます
SMTPプロトコルを使用した暗号化メール送信
POODLE脆弱性により、SSL v3.0は完全に安全ではなくなりました。そのため、SMTP暗号化プロトコルを使用する場合、Tls-v1.0-v1.2をサポートし、SSL 3.0およびそれ以前のバージョンはサポートされません。
ポート25はSTARTTLS暗号化をサポートしており、ユーザーはコード内に暗号化コードのセグメントを追加する必要があります。例えば、Javaでは以下のようにします:
props.setProperty("mail.smtp.starttls.enable", "true");
props.setProperty("mail.smtp.starttls.enable", "true");
このコードブロックはフローティングウィンドウ内に表示されます