解決阿里云郵件發(fā)送不能使用25端口問題
本地測(cè)試發(fā)郵件功能很流暢,部署到阿里云上以后發(fā)現(xiàn)總是NOT FIND,這就很奇怪。開始以為是url寫錯(cuò)了導(dǎo)致的,檢查N多遍發(fā)現(xiàn)完全一毛一樣的。后來各種百度,發(fā)現(xiàn)是因?yàn)榘⒗镌平昧?5端口導(dǎo)致的。查看各種資料,解決的辦法五花八門。試了幾種解決方案,都解決了問題。現(xiàn)在整理如下:(不用去嘗試申請(qǐng)解禁25端口的,可以很認(rèn)真負(fù)責(zé)的告訴你,完全沒有卵用)
首先,是阿里大大給的官方的解決方案,用SMTP發(fā)送郵件:代碼如下
# -*- coding:utf-8 -*-
import urllib, urllib2
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
# 發(fā)件人地址,通過控制臺(tái)創(chuàng)建的發(fā)件人地址
username = 'xxx@xxx.com'
# 發(fā)件人密碼,通過控制臺(tái)創(chuàng)建的發(fā)件人密碼
password = 'XXXXXXXX'
# 收件人地址列表,支持多個(gè)收件人,最多30個(gè)
rcptlist = ['to1@to.com', 'to2@to.com']
receivers = ','.join(rcptlist)
# 構(gòu)建 multipart 的郵件消息
msg = MIMEMultipart('mixed')
msg['Subject'] = 'Test Email'
msg['From'] = username
msg['To'] = receivers
# 構(gòu)建 multipart/alternative 的 text/plain 部分
alternative = MIMEMultipart('alternative')
textplain = MIMEText('純文本部分', _subtype='plain', _charset='UTF-8')
alternative.attach(textplain)
# 構(gòu)建 multipart/alternative 的 text/html 部分
texthtml = MIMEText('超文本部分', _subtype='html', _charset='UTF-8')
alternative.attach(texthtml)
# 將 alternative 加入 mixed 的內(nèi)部
msg.attach(alternative)
# 附件類型
# xlsx 類型的附件
xlsxpart = MIMEApplication(open('測(cè)試文件1.xlsx', 'rb').read())
xlsxpart.add_header('Content-Disposition', 'attachment', filename=Header("測(cè)試文件1.xlsx","utf-8").encode())
msg.attach(xlsxpart)
# jpg 類型的附件
jpgpart = MIMEApplication(open('2.jpg', 'rb').read())
jpgpart.add_header('Content-Disposition', 'attachment', filename=Header("2.jpg","utf-8").encode())
msg.attach(jpgpart)
# mp3 類型的附件
mp3part = MIMEApplication(open('3.mp3', 'rb').read())
mp3part.add_header('Content-Disposition', 'attachment', filename=Header("3.mp3","utf-8").encode())
msg.attach(mp3part)
# 發(fā)送郵件
try:
client = smtplib.SMTP()
#python 2.7以上版本,若需要使用SSL,可以這樣創(chuàng)建client
#client = smtplib.SMTP_SSL()
client.connect('smtpdm.aliyun.com')
client.login(username, password)
#發(fā)件人和認(rèn)證地址必須一致
client.sendmail(username, rcptlist, msg.as_string())
client.quit()
print '郵件發(fā)送成功!'
except smtplib.SMTPRecipientsRefused:
print '郵件發(fā)送失敗,收件人被拒絕'
except smtplib.SMTPAuthenticationError:
print '郵件發(fā)送失敗,認(rèn)證錯(cuò)誤'
except smtplib.SMTPSenderRefused:
print '郵件發(fā)送失敗,發(fā)件人被拒絕'
except smtplib.SMTPException,e:
print '郵件發(fā)送失敗, ', e.message
官方的當(dāng)然好用嘍,就是寫的太詳細(xì)和復(fù)雜了,實(shí)在懶得折騰,為了盡可能少的改代碼,就放棄了。
下面是兩種網(wǎng)友提供的簡單的解決方案
這個(gè)是簡化版的SMTP方式
import smtplib
from email.mime.text import MIMEText
msg_from = '306334678@qq.com' # 發(fā)送方郵箱
passwd = '****' # 填入發(fā)送方郵箱的授權(quán)碼(填入自己的授權(quán)碼,相當(dāng)于郵箱密碼)
msg_to = ['****@qq.com','**@163.com','*****@163.com'] # 收件人郵箱
subject = "郵件標(biāo)題" # 主題
content = "郵件內(nèi)容,我是郵件內(nèi)容,哈哈哈"
# 生成一個(gè)MIMEText對(duì)象(還有一些其它參數(shù))
# _text_:郵件內(nèi)容
msg = MIMEText(content)
# 放入郵件主題
msg['Subject'] = subject
# 也可以這樣傳參
# msg['Subject'] = Header(subject, 'utf-8')
# 放入發(fā)件人
msg['From'] = msg_from
# 放入收件人
msg['To'] = '616564099@qq.com'
# msg['To'] = '發(fā)給你的郵件啊'
try:
# 通過ssl方式發(fā)送,服務(wù)器地址,端口
s = smtplib.SMTP_SSL("smtp.qq.com", 465)
# 登錄到郵箱
s.login(msg_from, passwd)
# 發(fā)送郵件:發(fā)送方,收件方,要發(fā)送的消息
s.sendmail(msg_from, msg_to, msg.as_string())
print('成功')
except s.SMTPException as e:
print(e)
finally:
s.quit()
方法二:為使用send_mail模塊發(fā)送(和我原來的代碼相似,改動(dòng)較少,墻裂推薦)
setting.py配置如下
# EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.qq.com' # 如果是 163 改成 smtp.163.com EMAIL_PORT = 465 # 端口號(hào) EMAIL_HOST_USER = '306334678@qq.com' # 發(fā)送者的郵箱帳號(hào) EMAIL_HOST_PASSWORD = '***' # 發(fā)送者的郵箱授權(quán) DEFAULT_FROM_EMAIL = EMAIL_HOST_USER #這樣收到的郵件,收件人處就會(huì)這樣顯示 #DEFAULT_FROM_EMAIL = 'lqz<'306334678@qq.com>' EMAIL_USE_SSL = True #使用ssl #EMAIL_USE_TLS = False # 使用tls #EMAIL_USE_SSL 和 EMAIL_USE_TLS 是互斥的,即只能有一個(gè)為 True
views.py
from django.core.mail import send_mail # 導(dǎo)入郵箱模塊 from threading import Thread # 導(dǎo)入線程模塊 from threading import Thread t1 = Thread(target=send_mail,args=( '您的%s文章被%s評(píng)論了'%(article_name,user_name), '這個(gè)人評(píng)論了:%s'%(content), settings.EMAIL_HOST_USER, ['1670874977@qq.com'] )) t1.start()
到此這篇關(guān)于解決阿里云郵件發(fā)送不能使用25端口問題的文章就介紹到這了,更多相關(guān)阿里云郵件不能使用25端口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
CentOS 7如何實(shí)現(xiàn)定時(shí)執(zhí)行python腳本
這篇文章主要介紹了CentOS 7如何實(shí)現(xiàn)定時(shí)執(zhí)行python腳本,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
解決python中顯示圖片的plt.imshow plt.show()內(nèi)存泄漏問題
這篇文章主要介紹了解決python中顯示圖片的plt.imshow plt.show()內(nèi)存泄漏問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04
Python sql注入 過濾字符串的非法字符實(shí)例
這篇文章主要介紹了Python sql注入 過濾字符串的非法字符實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04
淺析Python 簡單工廠模式和工廠方法模式的優(yōu)缺點(diǎn)
這篇文章主要介紹了Python 工廠模式的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07
創(chuàng)建虛擬環(huán)境打包py文件的實(shí)現(xiàn)步驟
使用虛擬環(huán)境,可以為每個(gè)項(xiàng)目創(chuàng)建一個(gè)獨(dú)立的Python環(huán)境,每個(gè)環(huán)境都有自己的庫和版本,從而避免了依賴沖突,本文主要介紹了創(chuàng)建虛擬環(huán)境打包py文件的實(shí)現(xiàn)步驟,感興趣的可以了解一下2024-04-04

