解决阿里云邮件发送不能使用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中元类用法实例
Oct 10 Python
详解在Python的Django框架中创建模板库的方法
Jul 20 Python
使用Python的urllib和urllib2模块制作爬虫的实例教程
Jan 20 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
Aug 30 Python
对python中Librosa的mfcc步骤详解
Jan 09 Python
python列表插入append(), extend(), insert()用法详解
Sep 14 Python
python实现银行管理系统
Oct 25 Python
使用TensorFlow-Slim进行图像分类的实现
Dec 31 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
Jan 24 Python
关于python的缩进规则的知识点详解
Jun 22 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
Jan 06 Python
python 字典和列表嵌套用法详解
Jun 29 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读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
ThinkPHP中自定义目录结构的设置方法
2014/08/15 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
JavaScript 数组的 uniq 方法
2008/01/23 Javascript
基于jquery.Jcrop的头像编辑器
2010/03/01 Javascript
基于jquery的修改当前TAB显示标题的代码
2010/12/11 Javascript
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
javascript编写实用的省市选择器
2015/02/12 Javascript
JavaScript知识点整理
2015/12/09 Javascript
学习使用jQuery表单验证插件和日历插件
2017/02/13 Javascript
nodejs读写json文件的简单方法(必看)
2017/03/09 NodeJs
JS实现简单的星期格式转换功能示例
2018/07/23 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
2018/10/31 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
配置一个vue3.0项目的完整步骤
2019/04/26 Javascript
layui 实现表单和文件上传一起传到后台的例子
2019/09/16 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
2020/11/09 Javascript
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
零基础写python爬虫之HTTP异常处理
2014/11/05 Python
Python编程之event对象的用法实例分析
2017/03/23 Python
浅谈Django REST Framework限速
2017/12/12 Python
django使用xlwt导出excel文件实例代码
2018/02/06 Python
Python设计模式之原型模式实例详解
2019/01/18 Python
Python考拉兹猜想输出序列代码实践
2019/07/05 Python
德国电子商城:ComputerUniverse
2017/04/21 全球购物
俄罗斯建筑和装饰材料在线商店:Stroilandia
2020/07/25 全球购物
Diesel美国网上商店:意大利牛仔时装品牌
2020/12/10 全球购物
体育纪念品、亲笔签名的体育收藏品:Steiner Sports
2020/07/31 全球购物
广告设计专业自荐信范文
2013/11/14 职场文书
企业办公室岗位职责
2014/03/12 职场文书
俞敏洪北大演讲稿
2014/05/22 职场文书
九一八事变演讲稿
2014/09/05 职场文书
高中军训感想
2015/08/07 职场文书
SpringAop日志找不到方法的处理
2021/06/21 Java/Android
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
2021/06/30 SQL Server
MySQL的InnoDB存储引擎的数据页结构详解
2022/03/03 MySQL