1.outlook在本机无法发邮件
解决方法:寻找其它可发邮件的的邮箱及实现方式
1.使用网易邮箱进行发送,在网上找到对应实现方法,根据自己的框架修改为变量配置及读取的方式
2.过程遇到问题:
a.本文件调试通过,在其它程序中调用无法正常发送邮件;
原因:变量是在class类之前,所以在本文件中可以正常使用,但在外部文件中调用此class方法时,class外部变量未初始化,所以无法使用;
解决:将使用到的变量移入到class内部,并在方法中使用变量的前面加上self.(如self.a)
b.前面能正常发送邮件,中途调试修改后不能在正常发送邮件,且改回之前调试通过的样子依然无法发送
原因:错误码554,发送邮件过多,被限制
解决:暂无彻底解决方案,目前只能是重启电脑,一段时间不发送
c.使用本文件中定义的变量,可正常发送邮件,改为从配置文件中读取变量值时,无法正常发送邮件
原因:配置文件中变量后面加了注释(同本文件中定义的变量一样),读取变量时把注释也当成变量的一部分
解决:将变量去掉,或放到变量 的前一行
d.自己写的文件依赖导入标红(失败)
原因:导入的文件在另一个文件夹中
解决:使用from 文件夹 import 文件名
3.代码如下:
# -- coding: utf-8 --
import smtplib # smtp服务器
from email.mime.text import MIMEText # 邮件文本
import datetime
import os
import getpathInfo
import win32com.client as win32
from common.Log import logger
import readConfig
class send_email():
read_conf = readConfig.ReadConfig()
sender = read_conf.get_email('sender') # 从配置文件中读取,邮件发件人
password = read_conf.get_email('password') # 从配置文件中读取,发件人邮箱密码
subject = read_conf.get_email('subject') # 从配置文件中读取,邮件主题
#app = str(read_conf.get_email('app')) # 从配置文件中读取,邮件类型
recver = read_conf.get_email('recver') # 从配置文件中读取,邮件收件人
cc = read_conf.get_email('cc') # 从配置文件中读取,邮件抄送人
mail_path = os.path.join(getpathInfo.get_Path(), 'result', 'report.html') # 获取测试报告路径
logger = logger
def outlook(self):
olook = win32.Dispatch("outlook.application")
mail = olook.CreateItem(win32.constants.olMailItem)
mail.To = "Ally-0308@outlook.com" # 收件人
mail.CC = self.cc # 抄送
mail.Subject = str(datetime.datetime.now())[0:19]+'%s' %self.subject#邮件主题
mail.Attachments.Add(self.mail_path, 1, 1, "myFile")
content = """
执行测试中……
测试已完成!!
生成报告中……
报告已生成……
报告已邮件发送!!
"""
mail.Body = content
mail.Send()
print('send email ok!!!!')
logger.info('send email ok!!!!')
def mail_163(self):
content="""测试已完成!!
测试结果:成功!
"""+"测试报告地址:"+self.mail_path
message = MIMEText(content, "plain", "utf-8") # content 发送内容 "plain"文本格式 utf-8 编码格式
message['Subject'] =str(datetime.datetime.now())[0:19]+'%s' %self.subject#邮件主题
message['To'] = self.recver # 收件人
message['From'] = self.sender # 发件人
smtp = smtplib.SMTP_SSL("smtp.163.com", 465) # 实例化smtp服务器
smtp.login(self.sender,self. password) # 发件人登录
#smtp.sendmail(self.sender, [self.recver] + [self.cc], message.as_string()) # as_string 对 message 的消息进行了封装,收件人+抄送
smtp.sendmail(self.sender, [self.recver], message.as_string()) # as_string 对 message 的消息进行了封装
print("邮件发送成功")
#smtp.close()
smtp.quit()
if __name__ == '__main__':# 运营此文件来验证写的send_email是否正确
#send_email().outlook()
send_email().mail_163()
print("send email ok!!!!!!!!!!")