jira发送邮件的报错

一.安装完jira后,配置发送邮件出错具体报错如下:

An error has occurred with sending the test email:
com.atlassian.mail.MailException: javax.mail.MessagingException: Exception reading response;
  nested exception is:
    java.net.SocketTimeoutException: Read timed out
    at com.atlassian.mail.server.impl.SMTPMailServerImpl.sendWithMessageId(SMTPMailServerImpl.java:225)
    at com.atlassian.mail.server.impl.SMTPMailServerImpl.send(SMTPMailServerImpl.java:162)
    at com.atlassian.jira.plugins.mail.webwork.SendTestMail.doExecute(SendTestMail.java:107)
    at webwork.action.ActionSupport.execute(ActionSupport.java:165)
    at com.atlassian.jira.action.JiraActionSupport.execute(JiraActionSupport.java:63)
    at webwork.interceptor.DefaultInterceptorChain.proceed(DefaultInterceptorChain.java:39)
    at webwork.interceptor.NestedInterceptorChain.proceed(NestedInterceptorChain.java:31)
    at webwork.interceptor.ChainedInterceptor.intercept(ChainedInterceptor.java:16)
    at webwork.interceptor.DefaultInterceptorChain.proceed(DefaultInterceptorChain.java:35)
    at webwork.dispatcher.GenericDispatcher.executeAction(GenericDispatcher.java:225)
.....
错误较多省略....
.....
Caused by: java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
    at java.net.SocketInputStream.read(SocketInputStream.java:170)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:124)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
    at com.sun.mail.util.LineInputStream.readLine(LineInputStream.java:92)
    at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2349)
    ... 256 more

 贰.排查方法

(一)网上检索的化解办法中大部分都未有用,好多都以利用微博16三信箱做的布置,而我使用的邮箱是腾讯集团邮箱配置,测试平素发送不了,上边是率先个报错音讯

AuthenticationFailedException: 535 Error: authentication failed

本条张冠李戴主若是笔者太大意,未有安顿发送的邮件密码,前面添加密码后那一个荒唐化解。

(二)第叁个报错新闻

  不幸的是, 未有连接是唯恐的。审查以下错误并改进:

  • SocketTimeoutException: Read timed out

此地关键是端口难点,为四陆伍,测试报错,截图如下:

澳门金沙国际 1

 

 在那边修改端口成功解决,端口号能够是2伍,也足以是5八七,正是四陆伍会报错。

 



出于邮箱发送的邮箱账号更换,所以重复测试。结果直接出错,要不正是请求超时,要不便是未授权。

那壹章真的好多坑,分成几块来写
1.以测试Flask_mail为目的
二.狗书代码实战
用目录来看本片小说越来越好,markdown的目录功能很棒

正文主要内容:

  • 一.jira邮件服务器的安顿。

用smtp


一.jira邮件服务器的布署。

开首的时候,端口使用4玖伍,结果是伸手超时。

测试环境:

1.壹.jira的邮件设置必须由系统一管理理员进行操作,其余用户未有操作此部分的权限。邮件设置的入口位于【系统>电邮】,如图一.一。

澳门金沙国际 2

图一.1 邮件设置的输入位于【系统>电邮】

后来改成2伍,结果是未授权。

  • windows10
  • python3.5
壹.2.点击“配置”举办邮件服务器的设置,如图一.贰。

澳门金沙国际 3

图1.2 点击“配置”进行邮件服务器的设置

再后来听人说,有三个品类有用到集团QQ发邮件的,然后过去看,最早先也远非运行,因为本地的SQL
Express暗许是合二为一的,改的话,还得去改config,懒得改。就径直看代码了。


一.三.点击“配置”后跳转到页面,如图一.3。

澳门金沙国际 4

jira发送邮件报错,邮件配置。图一.叁 点击“配置”后跳转到页面

结果代码看了半天,也没看到哪些异样来。也就密码是用的MD5加密,再解密。

参考链接

segment-测试用例
blog-狗书中环境变量的坑
天涯论坛-对狗书记录比较完美的壹篇
很棒的总括


一.肆.点击“配置三个新的 SMTP电邮服务器”,如图1.四。

澳门金沙国际 5

图一.肆 点击“配置3个新的 SMTP电邮服务器”

其实不行,就改了当地配置,运营起来查看了。

Flask-Mail 发送邮件的显要步骤:

  • 配备 app 对象的邮件服务器地址,端口,用户名和密码等
  • 创设2个 Mail 的实例:mail = Mail(app)
  • 创制1个 Message 新闻实例,有四个参数:邮件标题、发送者和接收者
  • 创办邮件内容,若是是 HTML 格式,则运用
  • msg.html,若是是纯文本格式,则选择 msg.body
  • 最终调用 mail.send(msg) 发送新闻
一.5.点击“配置”进行邮件服务器的装置,如图一.5。

澳门金沙国际 6

图壹.伍 点击“配置二个新的 SMTP电邮服务器”后跳转到的页面

忽然发现密码解码之后,竟然和团结那边获得的不同。于是替换了1晃看望,当然port=495是那些的,会晚点

测试Flask_mail发送邮件

点此为原来的文章出处,以下为部分引用


1.简介

给用户发送邮件是 Web
应用中最常见的任务之1,比如用户注册,找回密码等。Python 内置了1个smtplib 的模块,能够用来发送邮件,那里大家利用
Flask-Mail,是因为它能够和 Flask 集成,让我们更利于地促成此意义。


2.安装

# pip
$ pip install Flask-Mail

# 或下载源码安装
$ git clone https://github.com/mattupstate/flask-mail.git
$ cd flask-mail
$ python setup.py install

3.出殡和埋葬邮件

一.6.对SMTP服务器的“名称”、“来自的电邮地址”、“电邮前缀”实行安装,如图一.6。

澳门金沙国际 7

图一.陆 对SMTP服务器的“名称”、“来自的电邮地址”、“电邮前缀”举行设置

port=二五要么简直不设置,发送成功了

SMTP端口

Flask-Mail 连接到简单邮件传输协议 (Simple Mail Transfer Protocol,
SMTP) 服务器,并把邮件交给那些服务器发送。那里以 QQ
邮箱为例,介绍怎么样简单地发送邮件。从前,大家需求通晓 QQ
邮箱的服务器地址和端口是什么

[

澳门金沙国际 8

image.jpg

一.七.对SMTP服务器主机的安装,包罗“协议”、“名称”、“STMP端口号”、【用户email的“账号”、“密码”】“”举办设置,如图壹.7。

澳门金沙国际 9

图1.柒 对SMTP服务器主机的安装

转了一大圈,结果竟是是密码错误

POP和IMAP,SMTP区别

POP和IMAP的分别在于:POP的操作,不会共同到服务器上,也正是不会潜移默化到服务器,而IMAP是和服务器同步的。
SMTP 是出殡和埋葬邮件的服务器。

测试代码

# -*- coding: utf-8 -*-

from flask import Flask
from flask_mail import Mail, Message
import os

app = Flask(__name__)

app.config['MAIL_SERVER'] = 'smtp.qq.com'  # 邮件服务器地址
app.config['MAIL_PORT'] = 25               # 邮件服务器端口
app.config['MAIL_USE_TLS'] = True          # 启用 TLS
app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME') or 'me@example.com'
app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD') or '123456'

mail = Mail(app)

@app.route('/')
def index():
    msg = Message('Hi', sender='me@example.com', recipients=['he@example.com'])
    msg.html = '<b>Hello Web</b>'
    # msg.body = 'The first email!'
    mail.send(msg)
    return '<h1>OK!</h1>'

if __name__ == '__main__':
    app.run(host='127.0.0.1', debug=True)

开始展览须求的修改后,在命令行用python打开那些文件就足以拓展测试了
亟需留意的几点如下

1.⑧.对1.陆、一.7操作步骤填写完成后,点击“Test Connection”进行邮件的连年测试,如图1.八。

澳门金沙国际 10

图1.八 对1.陆、一.7操作步骤填写完结后,点击“Test Connection”

mail from address must be same as authorization
user那消息提醒有以下三种:

此间的壹部分坑

  • qq邮箱的smtp端口为 25
  • MAIL_PASSWO福睿斯D最棒用邮箱里转变的授权码,可在”邮箱- 设置- 账户”
    内查看
  • from flask_mail import Mail, Message 注意分寸写
  • sender 要和app.config[‘MAIL_USERNAME’]一致
一.九.点击“Test Connection”后,jira页面会展现“连接测试成功”的升迁,如图一.玖-一。

澳门金沙国际 11

图1.九-一 jira页面会呈现“连接测试成功”的唤起

1.九-2 点击“添加”提交保存SMTP配置音信到系统中,如图一.9-二。

澳门金沙国际 12

图一.9-2 点击“添加”提交保存SMTP配置音信到系统中

一.玖-三 点击“添加”后,跳转到的页面,如图壹.9-3。

澳门金沙国际 13

图一.玖-三 点击“添加”后,跳转到的页面

1.玖-四 点击“发送测试邮件”,如图1.九-四。

澳门金沙国际 14

图壹.九-四 点击“发送测试邮件”

一.玖-5 点击”发送测试邮件”后,页面跳转的页面,如图一.九-五。

澳门金沙国际 15

图壹.九-五 点击”发送测试邮件”后,页面跳转的页面

1.9-6 点击“发送”,如图1.9-6。

澳门金沙国际 16

图1.9-6 点击“发送”

一.玖-柒点击“发送”后,页面“电邮日志”部分有照应的发送成功音信提醒,如图壹.玖-7。

澳门金沙国际 17

图一.九-7 点击“发送”后,页面“电邮日志”部分有相应的出殡成功音信提示

一.玖-八 登录126邮箱查收到如下邮件,则表明邮件连接测试成功,如图一.玖-八。

澳门金沙国际 18

图一.玖-八 登录1贰陆邮箱查收到有JIRA核心的邮件

说明:个人觉得判断SMTP是否配置成功关键还是看步骤1.9-8是否有邮件  收到。步骤1.9-1这种页面提示,不是很“靠谱”。

1.未开启pop3或者smtp

狗书代码实战

通过敲测试代码大家已经主导精通Flask-mail的骨干工作形式了,单是在敲狗书里那1章代码时,照旧会遇见不少坑

二.账号给错了

环境变量

书中付出设置环境变量方法如下

# Mac OS X 中使用bash,那么可以按照下面的方式设定这两个变量:
(venv) $ export MAIL_USERNAME=<Gmail username>
(venv) $ export MAIL_PASSWORD=<Gmail password>
# 微软Windows 用户可按照下面的方式设定环境变量:
(venv) $ set MAIL_USERNAME=<Gmail username>
(venv) $ set MAIL_PASSWORD=<Gmail password>

小编某些表述不清楚,实际上在windows中

# cmd下
set MAIL_USERNAME='xxxxx@qq.com'  #此处有疑问,详见后文
# cmd下查看环境变量直接输入set即可
set
# powershell中
$env:MAIL_USERNAME='xxxxx@qq.com'

留神:那中艺术设置的是一时环境变量,那代表重新打开cmd窗口就要求再一次设置一时半刻环境变量

环境变量那里有坑, 注意
不设置环境变量,直接在代码中布署用户名和密码不出新难点

app.config['MAIL_USERNAME'] = 'my_email@qq.com'
app.config['MAIL_PASSWORD'] = 'password'

而是假如在环境变量中配备用户名和密码,在代码中读取就会报错

#配置环境变量
$set MAIL_USERNAME = 'my_email@qq.com'
$set MAIL_PASSWORD = 'password'
#代码
app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME')
app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD')
#运行报错

  raise SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: (535, b'Error: \xc7\xeb\xca\xb9\xd3\xc8\xa8\xb5\xc7\xc2\xbc\xa1\xa3\xcf\xea\xc7\xe9\xc7\xeb\xbf\xb4: http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256')

报错应该是说验证码出现难题,就是密码错误了。
而是不使用环境变量密码就正确那就很奇怪了
遂在代码中投入

#一个读取环境变量,一个直接读取
app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME')
app.config['MAIL_PASSWORD'] = 'password'

#在主函数中加入打印语句
@app.route('/', methods=['GET', 'POST'])
def index():
    form = NameForm()
    print(app.config['MAIL_USERNAME'])#打印
    print(app.config['MAIL_PASSWORD'])#打印

#打印结果如下
'my_email@qq.com'  #带引号
password        #无引号

察觉分歧后遂在环境变量配置中撤消了引号,终于成功运转。

$set MAIL_USERNAME = my_email@qq.com
$set MAIL_PASSWORD = password

可是那种情况类似惟有用授权码当密码才会合世难点。因为作者看了5六篇小说旁人都并未有遇见那个题材,而且也很少有人提问,所以本人照旧封存了加引号的笔录。


至于作者那边,那正是密码错误,那感觉真是坑爹。一向以为是代码哪个拿错了,也许是邮箱里面配备没弄好,结果竟然是密码错误

坑已点完,项目实战

那服务器复苏解析能还是无法确切点啊!!!

1.安装

(venv) $ pip install flask-mail

至于那密码,笔者倒是有意识说qq号的密码和邮箱的密码是不一样的,可是一般情况,根本不会去改邮箱的密码,何地知道还是是不等同的。

2.Flask-Mail配置 qq 邮箱

是因为Gmail在境内不能够选取,大家用qq邮箱替代

import os
# 原有内容
app.config['MAIL_SERVER'] = 'smtp.qq.com'
app.config['MAIL_PORT'] = 25
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME')
app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD')

~~就算自个儿从来在邮箱登录页面登不上来,不过到底没悟出这么些题材,因为换了贰个报到入口就进入了。

3.布署环境变量

set MAIL_USERNAME = 'your-email@qq.com'
set MAIL_PASSWORD = 'lssokgzndbfsfdjj'
set FLASK_ADMIN = 'admin@gmail.com' #管理员邮箱,也是项目中的接收者邮箱

看来,正是邮箱密码和qq的密码存在不1致的情形,假诺运用邮件发送代码,必须在邮箱登录页面保险这一个邮箱能登录进去,才能开端测试邮件发送。

四.在hello.py中添加电子邮件帮衬

邮件发送函数

from flask_mail import Message

app.config['FLASKY_MAIL_SUBJECT_PREFIX'] = '[Flasky]'#邮件主题前缀
app.config['FLASKY_MAIL_SENDER'] = 'Flasky Admin <flasky@example.com>'  #这个是发件人,而<>前面的内容,实际上就相当于昵称的作用
def send_mail(to, subject, template, **kwargs):
    msg = Message(app.config['FLASKY_MAIL_SUBJECT_PREFIX'] + subject, sender=app.config['FLASKY_MAIL_SENDER'], recipients=[to])
    msg.body = render_template(template + '.txt', **kwargs)
    msg.html = render_template(template + '.html', **kwargs)
    mail.send(msg)

app.config[澳门金沙国际 ,’FLASKY_MAIL_SUBJECT_PREFIX’] 发送的邮件大旨的前缀
app.config[‘FLASKY_MAIL_SENDER’]
邮件发送者,此人要在您安排过的app.config[‘MAIL_USERNAME’] 里

比方提交的用户是新用户,则给管理员发送一封邮件提示

# 原有内容
app.config['FLASKY_ADMIN'] = os.environ.get('FLASKY_ADMIN')
# 原有内容
@app.route('/', methods=['GET', 'POST'])
def index():
    form = NameForm()
    if form.validate_on_submit():
        user = User.query.filter_by(username=form.name.data).first()
        if user is None:
            user = User(username=form.name.data)
            db.session.add(user)
            session['known'] = False
            if app.config['FLASKY_ADMIN']:
                send_mail(app.config['FLASKY_ADMIN'], 'New User', 'mail/new_user',  user=user)
    else:
        session['known'] = True
        session['name'] = form.name.data
        return redirect(url_for('index'))
    return render_template('index.html', form=form, name=session.get('name'), known=session.get('known', False))

此间书中平昔不涉嫌的是
供给在templates下建立mail子文件夹存放邮件模板。

# templates/mail/new_user.txt
User {{ user.username }} has joined.
# templates/mail/new_user.html
User <b>{{ user.username }}</b> has joined

公司QQ的话,pop三 ,IMAP,STMP的打开是在装置-客户端那些下边安装的

5.异步发送电子邮件

当在发送电子邮件时,可窥见先后有停滞现象,表以后浏览器上正是刷新按钮在转,那时便是send_mail()函数正在履行。为了幸免那种不供给的推移,可以选用异步的法子执行邮件发送函数。
修改hello.py:

from threading import Thread

def send_async_email(app, msg):
    with app.app_context():
        mail.send(msg)

def send_mail(to, subject, template, **kwargs):
    msg = Message(app.config['FLASKY_MAIL_SUBJECT_PREFIX'] + subject, sender=app.config['FLASKY_MAIL_SENDER'], recipients=[to])
    msg.body = render_template(template + '.txt', **kwargs)
    msg.html = render_template(template + '.html', **kwargs)
    thr = Thread(target=send_async_email, args=[app, msg])
    thr.start()
    return thr

有关经常的,则都以在装置-账户下设置的

END

 

相关文章