解决阿里云邮件发送不能使用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 相关文章推荐
在Linux下调试Python代码的各种方法
Apr 17 Python
深入解析Python中的lambda表达式的用法
Aug 28 Python
Python reduce()函数的用法小结
Nov 15 Python
python操作excel文件并输出txt文件的实例
Jul 10 Python
python 按钮点击关闭窗口的实现
Mar 04 Python
Python读写操作csv和excle文件代码实例
Mar 16 Python
在PyTorch中使用标签平滑正则化的问题
Apr 03 Python
Django 解决阿里云部署同步数据库报错的问题
May 14 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
May 27 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
Dec 13 Python
Python 如何安装Selenium
May 06 Python
pytorch 如何使用batch训练lstm网络
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
overlord人气高涨,却被菲利普频繁举报,第四季很难在国内上映
2020/05/06 日漫
php基础知识:类与对象(5) static
2006/12/13 PHP
一个简单的PHP&amp;MYSQL留言板源码
2020/07/19 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
2014/11/12 PHP
PHP准确取得服务器IP地址的方法
2015/06/02 PHP
Zend Framework入门教程之Zend_Mail用法示例
2016/12/08 PHP
php 数组元素快速去重
2017/05/05 PHP
关于document.cookie的使用javascript
2008/04/11 Javascript
JavaScript中常见陷阱小结
2010/04/27 Javascript
用javascript作一个通用向导说明
2011/08/30 Javascript
使用jQuery快速解决input中placeholder值在ie中无法支持的问题
2014/01/02 Javascript
单击和双击事件的冲突处理示例代码
2014/04/03 Javascript
Node.js异步I/O学习笔记
2014/11/04 Javascript
JavaScript针对网页节点的增删改查用法实例
2015/02/02 Javascript
基于JavaScript实现智能右键菜单
2016/03/02 Javascript
JS数组返回去重后数据的方法解析
2017/01/03 Javascript
微信小程序 增、删、改、查操作实例详解
2017/01/13 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
2018/07/31 Javascript
JS实现马赛克图片效果完整示例
2019/04/13 Javascript
仿iPhone通讯录制作小程序自定义选择组件的实现
2019/05/23 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
[13:38]2015国际邀请赛中国战队出征仪式
2015/05/29 DOTA
python学习 流程控制语句详解
2016/06/01 Python
浅谈用Python实现一个大数据搜索引擎
2017/11/28 Python
Ubuntu下使用python读取doc和docx文档的内容方法
2018/05/08 Python
在Python中输入一个以空格为间隔的数组方法
2018/11/13 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
2020/02/23 Python
浅谈TensorFlow之稀疏张量表示
2020/06/30 Python
LightInTheBox西班牙站点:全球商品在线采购
2016/09/22 全球购物
美国沃尔玛网上超市:Walmart
2020/08/14 全球购物
商超业务员岗位职责
2014/03/12 职场文书
防汛通知
2015/04/25 职场文书
董事长新年致辞
2015/07/29 职场文书
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
2022/04/24 Vue.js