解决阿里云邮件发送不能使用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内置函数bin() oct()等实现进制转换
Dec 30 Python
使用python生成杨辉三角形的示例代码
Aug 29 Python
python安装pywin32clipboard的操作方法
Jan 24 Python
Python中PyQt5/PySide2的按钮控件使用实例
Aug 17 Python
Python 实现大整数乘法算法的示例代码
Sep 17 Python
python判断无向图环是否存在的示例
Nov 22 Python
python通过文本在一个图中画多条线的实例
Feb 21 Python
Pycharm中import torch报错的快速解决方法
Mar 05 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
Apr 08 Python
python3 简单实现组合设计模式
Jul 02 Python
python怎么对数字进行过滤
Jul 05 Python
python中K-means算法基础知识点
Jan 25 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
真正面向对象编程:PHP5.01发布
2006/10/09 PHP
php 获取客户端的真实ip
2009/11/30 PHP
延长phpmyadmin登录时间的方法
2011/02/06 PHP
第六章 php目录与文件操作
2011/12/30 PHP
PHP 年龄计算函数(精确到天)
2012/06/07 PHP
解析php时间戳与日期的转换
2013/06/06 PHP
基于empty函数的输出详解
2013/06/17 PHP
PHP浮点数的一个常见问题
2016/03/10 PHP
javascript GUID生成器实现代码
2009/10/31 Javascript
JavaScript中的方法调用详细介绍
2014/12/30 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
2015/03/23 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
微信小程序 开发之顶部导航栏实例代码
2017/02/23 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
关于HTML5的data-*自定义属性的总结
2018/05/05 Javascript
angularjs结合html5实现拖拽功能
2018/06/25 Javascript
layui.use模块外部使用其内部定义的js封装函数方法
2019/09/16 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
[55:42]VG vs VGJ.T 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
python实现简单socket程序在两台电脑之间传输消息的方法
2015/03/13 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
2017/07/06 Python
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
Series和DataFrame使用简单入门
2019/11/13 Python
python路径的写法及目录的获取方式
2019/12/26 Python
Linux下升级安装python3.8并配置pip及yum的教程
2020/01/02 Python
Spartoo比利时:欧洲时尚购物网站
2017/12/06 全球购物
个人自荐书
2013/12/20 职场文书
护士见习期自我鉴定
2014/02/08 职场文书
小学生读书活动总结
2014/06/30 职场文书
新颖的化妆品活动方案
2014/08/21 职场文书
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js
Python中with上下文管理协议的作用及用法
2022/03/18 Python
JavaScript获取URL参数的方法分享
2022/04/07 Javascript