解决阿里云邮件发送不能使用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自定义主从分布式架构实例分析
Sep 19 Python
Python科学计算之NumPy入门教程
Jan 15 Python
Python基础教程之内置函数locals()和globals()用法分析
Mar 16 Python
如何使用VSCode愉快的写Python于调试配置步骤
Apr 06 Python
详解Django解决ajax跨域访问问题
Aug 24 Python
Django框架的中的setting.py文件说明详解
Oct 15 Python
python通过链接抓取网站详解
Nov 20 Python
Python.append()与Python.expand()用法详解
Dec 18 Python
pytorch中tensor张量数据类型的转化方式
Dec 31 Python
Python callable内置函数原理解析
Mar 05 Python
Selenium使用Chrome模拟手机浏览器方法解析
Apr 10 Python
Python脚本实现监听服务器的思路代码详解
May 28 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 set_time_limit(0) 设置程序执行时间的函数
2010/05/26 PHP
深入apache host的配置详解
2013/06/09 PHP
php实现Session存储到Redis
2015/11/11 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
2018/08/06 PHP
safari,opera嵌入iframe页面cookie读取问题解决方法
2010/06/23 Javascript
jQuery 验证插件 Web前端设计模式(asp.net)
2010/10/17 Javascript
js解析与序列化json数据(二)序列化探讨
2013/02/01 Javascript
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
jquery判断小数点两位和自动删除小数两位后的数字
2014/03/19 Javascript
JQuery操作元素的css样式
2015/03/09 Javascript
js实现仿阿里巴巴城市选择框效果实例
2015/06/24 Javascript
JavaScript设计模式之单体模式全面解析
2016/09/09 Javascript
AngularJS全局警告框实现方法示例
2017/05/18 Javascript
nodejs中函数的调用实例详解
2018/10/31 NodeJs
Vue中img的src是动态渲染时不显示的解决
2019/11/14 Javascript
基于Echarts图表在div动态切换时不显示的解决方式
2020/07/20 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
2020/12/30 jQuery
python登录QQ邮箱发信的实现代码
2013/02/10 Python
linux 下实现python多版本安装实践
2014/11/18 Python
python使用三角迭代计算圆周率PI的方法
2015/03/20 Python
使用Python实现博客上进行自动翻页
2017/08/23 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
2019/08/09 Python
python实现画循环圆
2019/11/23 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
2020/02/18 Python
tensorflow中tf.reduce_mean函数的使用
2020/04/19 Python
Python如何使用队列方式实现多线程爬虫
2020/05/12 Python
CentOS 7如何实现定时执行python脚本
2020/06/24 Python
Python字典dict常用方法函数实例
2020/11/09 Python
NBA欧洲商店(西班牙):NBA Europe Store ES
2019/04/16 全球购物
LN-CC日本:高端男装和女装的奢侈时尚目的地
2019/09/01 全球购物
大学生年度自我鉴定
2013/10/31 职场文书
教师演讲稿范文
2014/01/08 职场文书
六查六看自查报告
2014/10/14 职场文书
2015年毕业生个人自荐书
2015/03/24 职场文书
asyncio异步编程之Task对象详解
2022/03/13 Python