解决阿里云邮件发送不能使用25端口问题


Posted in Python onAugust 07, 2020

本地测试发邮件功能很流畅,部署到阿里云上以后发现总是NOT FIND,这就很奇怪。开始以为是url写错了导致的,检查N多遍发现完全一毛一样的。后来各种百度,发现是因为阿里云禁用了25端口导致的。查看各种资料,解决的办法五花八门。试了几种解决方案,都解决了问题。现在整理如下:(不用去尝试申请解禁25端口的,可以很认真负责的告诉你,完全没有卵用)

首先,是阿里大大给的官方的解决方案,用SMTP发送邮件:代码如下

# -*- 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
# 发件人地址,通过控制台创建的发件人地址
username = 'xxx@xxx.com'
# 发件人密码,通过控制台创建的发件人密码
password = 'XXXXXXXX'
# 收件人地址列表,支持多个收件人,最多30个
rcptlist = ['to1@to.com', 'to2@to.com']
receivers = ','.join(rcptlist)
# 构建 multipart 的邮件消息
msg = MIMEMultipart('mixed')
msg['Subject'] = 'Test Email'
msg['From'] = username
msg['To'] = receivers
# 构建 multipart/alternative 的 text/plain 部分
alternative = MIMEMultipart('alternative')
textplain = MIMEText('纯文本部分', _subtype='plain', _charset='UTF-8')
alternative.attach(textplain)
# 构建 multipart/alternative 的 text/html 部分
texthtml = MIMEText('超文本部分', _subtype='html', _charset='UTF-8')
alternative.attach(texthtml)
# 将 alternative 加入 mixed 的内部
msg.attach(alternative)
# 附件类型
# xlsx 类型的附件
xlsxpart = MIMEApplication(open('测试文件1.xlsx', 'rb').read())
xlsxpart.add_header('Content-Disposition', 'attachment', filename=Header("测试文件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)
# 发送邮件
try:
  client = smtplib.SMTP()
  #python 2.7以上版本,若需要使用SSL,可以这样创建client
  #client = smtplib.SMTP_SSL()
  client.connect('smtpdm.aliyun.com')
  client.login(username, password)
  #发件人和认证地址必须一致
  client.sendmail(username, rcptlist, msg.as_string())
  client.quit()
  print '邮件发送成功!'
except smtplib.SMTPRecipientsRefused:
  print '邮件发送失败,收件人被拒绝'
except smtplib.SMTPAuthenticationError:
  print '邮件发送失败,认证错误'
except smtplib.SMTPSenderRefused:
  print '邮件发送失败,发件人被拒绝'
except smtplib.SMTPException,e:
  print '邮件发送失败, ', e.message

官方的当然好用喽,就是写的太详细和复杂了,实在懒得折腾,为了尽可能少的改代码,就放弃了。

下面是两种网友提供的简单的解决方案

这个是简化版的SMTP方式

import smtplib
from email.mime.text import MIMEText

msg_from = '306334678@qq.com' # 发送方邮箱
passwd = '****' # 填入发送方邮箱的授权码(填入自己的授权码,相当于邮箱密码)
msg_to = ['****@qq.com','**@163.com','*****@163.com'] # 收件人邮箱

subject = "邮件标题" # 主题
content = "邮件内容,我是邮件内容,哈哈哈"
# 生成一个MIMEText对象(还有一些其它参数)
# _text_:邮件内容
msg = MIMEText(content)
# 放入邮件主题
msg['Subject'] = subject
# 也可以这样传参
# msg['Subject'] = Header(subject, 'utf-8')
# 放入发件人
msg['From'] = msg_from
# 放入收件人
msg['To'] = '616564099@qq.com'
# msg['To'] = '发给你的邮件啊'
try:
  # 通过ssl方式发送,服务器地址,端口
  s = smtplib.SMTP_SSL("smtp.qq.com", 465)
  # 登录到邮箱
  s.login(msg_from, passwd)
  # 发送邮件:发送方,收件方,要发送的消息
  s.sendmail(msg_from, msg_to, msg.as_string())
  print('成功')
except s.SMTPException as e:
  print(e)
finally:
  s.quit()

方法二:为使用send_mail模块发送(和我原来的代码相似,改动较少,墙裂推荐)

setting.py配置如下

# EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

EMAIL_HOST = 'smtp.qq.com' # 如果是 163 改成 smtp.163.com
EMAIL_PORT = 465  # 端口号
EMAIL_HOST_USER = '306334678@qq.com' # 发送者的邮箱帐号
EMAIL_HOST_PASSWORD = '***' #  发送者的邮箱授权
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
#这样收到的邮件,收件人处就会这样显示
#DEFAULT_FROM_EMAIL = 'lqz<'306334678@qq.com>'

EMAIL_USE_SSL = True  #使用ssl


#EMAIL_USE_TLS = False # 使用tls
#EMAIL_USE_SSL 和 EMAIL_USE_TLS 是互斥的,即只能有一个为 True

views.py

from django.core.mail import send_mail  # 导入邮箱模块
from threading import Thread   # 导入线程模块
from threading import Thread
t1 = Thread(target=send_mail,args=(

'您的%s文章被%s评论了'%(article_name,user_name),

'这个人评论了:%s'%(content),

settings.EMAIL_HOST_USER,

['1670874977@qq.com'] )) 

t1.start()

到此这篇关于解决阿里云邮件发送不能使用25端口问题的文章就介绍到这了,更多相关阿里云邮件不能使用25端口内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python爬虫教程之爬取百度贴吧并下载的示例
Mar 07 Python
跟老齐学Python之赋值,简单也不简单
Sep 24 Python
Python正则表达式实现截取成对括号的方法
Jan 06 Python
python 实现tar文件压缩解压的实例详解
Aug 20 Python
numpy返回array中元素的index方法
Jun 27 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
Oct 28 Python
python判断字符串或者集合是否为空的实例
Jan 23 Python
Python简单基础小程序的实例代码
Apr 28 Python
python实现高斯投影正反算方式
Jan 17 Python
浅谈python3 构造函数和析构函数
Mar 12 Python
Python OpenCV读取中文路径图像的方法
Jul 02 Python
深入了解Python 方法之类方法 &amp; 静态方法
Aug 17 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
Aug 07 #Python
详解pycharm2020.1.1专业版安装指南(推荐)
Aug 07 #Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
Aug 07 #Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
Aug 07 #Python
Python如何发送与接收大型数组
Aug 07 #Python
Python如何实现远程方法调用
Aug 07 #Python
记一次django内存异常排查及解决方法
Aug 07 #Python
You might like
php上传文件并显示上传进度的方法
2015/03/24 PHP
Symfony2框架学习笔记之表单用法详解
2016/03/18 PHP
PHP转换文本框内容为HTML格式的方法
2016/07/20 PHP
JavaScript 解析Json字符串的性能比较分析代码
2009/12/16 Javascript
JavaScript Event学习第四章 传统的事件注册模型
2010/02/07 Javascript
JS实现点击颜色块切换指定区域背景颜色的方法
2015/02/25 Javascript
js时间比较 js计算时间差的简单实现方法
2016/08/26 Javascript
js滚轮事件兼容性问题需要注意哪些
2016/11/15 Javascript
javascript 中事件冒泡和事件捕获机制的详解
2017/09/01 Javascript
vue实现消息的无缝滚动效果的示例代码
2017/12/05 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
vue中过滤器filter的讲解
2019/01/21 Javascript
JS重学系列之聊聊new操作符
2019/03/04 Javascript
新手如何快速理解js异步编程
2019/06/24 Javascript
JS如何寻找数组中心索引过程解析
2020/06/01 Javascript
python实现封装得到virustotal扫描结果
2014/10/05 Python
Python实现批量检测HTTP服务的状态
2016/10/27 Python
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
在Python中获取两数相除的商和余数方法
2018/11/10 Python
python实现字符串加密 生成唯一固定长度字符串
2019/03/22 Python
高考考python编程是真的吗
2020/07/20 Python
深入了解Python 变量作用域
2020/07/24 Python
利用SVG和CSS3来实现一个炫酷的边框动画
2015/07/22 HTML / CSS
仿酷狗html5手机音乐播放器主要部分代码
2013/05/15 HTML / CSS
加拿大廉价机票预订网站:CheapOair.ca
2018/03/04 全球购物
澳大利亚窗帘商店:Curtain Wonderland
2019/12/01 全球购物
北京振戎融通Java面试题
2015/09/03 面试题
团工委书记自荐书范文
2013/12/17 职场文书
后备干部考察材料
2014/02/12 职场文书
师恩难忘教学反思
2014/04/27 职场文书
专家推荐信怎么写
2015/03/25 职场文书
销售经理助理岗位职责
2015/04/13 职场文书
实习单位意见
2015/06/04 职场文书
css display table 自适应高度、宽度问题的解决
2021/05/07 HTML / CSS
Python中json.dumps()函数的使用解析
2021/05/17 Python