python基于exchange函数发送邮件过程详解


Posted in Python onNovember 06, 2020

1.Python hasattr() 函数

描述

hasattr() 函数用于判断对象是否包含对应的属性。

语法

hasattr 语法:

hasattr(object, name)

参数

  • object -- 对象。
  • name -- 字符串,属性名。

返回值

如果对象有该属性返回 True,否则返回 False。

实例

以下实例展示了 hasattr 的使用方法:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Coordinate:
x = 10

y = -5

z = 0
point1 = Coordinate()
print(hasattr(point1, 'x'))
print(hasattr(point1, 'y'))
print(hasattr(point1, 'z'))
print(hasattr(point1, 'no')) # 没有该属性

输出结果:

True

True

True

False

打包.ui文件:

C:\Python27\Lib\site-packages\PyQt4>pyuic4 E:\pyDemo\proTools.ui -o proTools.py

Qt 代码是面向对象的,并且简单易学。所有我们添加的组件都是一个对象,并且都拥有自己的方法比如toPlainText()(用来读取输入框中的值)。这让它使用起来非常方便。

代码打包:C:\Python27\Scripts>python pyinstaller-script.py -w E:\pyDemo\PyQt\testPyQt.py testPyQt.spec

-F 带黑窗口 (打包成单个exe)

-W 不带黑窗口(打包成文件形式)

-i 加图标

pyinstaller -i D:\ALIX_SH\2carReport\yx.ico -W D:\ALIX_SH\2carReport\upload2carReport.py

-F -w 打包成exe,但不带黑窗口

pyinstaller -i D:\ALIX_SH\2carReport\yx.ico -F -w D:\ALIX_SH\2carReport\upload2carReport.py

下面用Pyinstaller生成一个可执行文件试试。

在命令提示符中去到要打包的目录;直接输入"pyinstaller -F -w 文件名.py(F大写);文件目录出现新的文件夹,里面就是打包好的exe文件了;

  • -F, -onefile:打包成一个exe文件
  • -w, -windowed:使用窗口,无控制台
  • -c, -console:无窗口,使用控制台
  • -D, -onedir:创建一个目录,包含exe文件,但会依赖其他文件
  • --icon=图标路径

可以通过"Pyinstaller -h"来查看

Python发邮件的代码如下:

只需要填写好加粗字体,即可正常使用。

from exchangelib import DELEGATE, Account, Credentials, Message, Mailbox, HTMLBody

def Email(to, subject, body):
  creds = Credentials(
    username='xxxxxx',
    password='xxxxxx'
  )
  account = Account(
    primary_smtp_address='xxx@xxx.com',
    credentials=creds,
    autodiscover=True,
    access_type=DELEGATE
  )
  m = Message(
    account=account,
    subject=subject,
    body=HTMLBody(body),
    to_recipients = [Mailbox(email_address=to)]
  )
  m.send()

Email("xxx@xxx.com", "abc", "def")

但是如果Python环境安装有瑕疵,则报错如下:

$python3 ab.py
Traceback (most recent call last):
 File "ab.py", line 22, in <module>
  Email("xxx@xxx.com", "abc", "def")
 File "ab.py", line 12, in Email
  access_type=DELEGATE
 File "/usr/local/lib/python3.5/site-packages/exchangelib/account.py", line 66, in __init__
  credentials=credentials)
 File "/usr/local/lib/python3.5/site-packages/exchangelib/autodiscover.py", line 214, in discover
  email=email)
 File "/usr/local/lib/python3.5/site-packages/exchangelib/autodiscover.py", line 236, in _try_autodiscover
  return _try_autodiscover(e.server, credentials, email)
 File "/usr/local/lib/python3.5/site-packages/exchangelib/autodiscover.py", line 262, in _try_autodiscover
  raise_from(AutoDiscoverFailed('All steps in the autodiscover protocol failed'), None)
 File "/usr/local/lib/python3.5/site-packages/future/utils/__init__.py", line 398, in raise_from
  exec(execstr, myglobals, mylocals)
 File "<string>", line 1, in <module>
exchangelib.errors.AutoDiscoverFailed: All steps in the autodiscover protocol failed

好在我有台机器安装Python3.5.2正常,执行上述完全没有问题。

今天终于搞定!!! 2017-12-11

exchange的版本不对,

我本机版本:

pip3 search exchangelib
exchangelib (1.10.6) - Client for Microsoft Exchange Web Services (EWS)
INSTALLED: 1.9.4
LATEST: 1.10.6

服务器版本为:

$pip3 search exchangelib
exchangelib (1.10.6) - Client for Microsoft Exchange Web Services (EWS)
INSTALLED: 1.10.4
LATEST: 1.10.6

要做的就是把服务器上的版本降低到1.9.4,就?了。

pip3 install exchangelib==1.9.4

再次执行发邮件的操作,bingo,搞定!

python基于exchange函数发送邮件过程详解

1、首先下载一个神器exchangelib,操作 pip install exchangelib

2、然后只需要将下面的信息改成你的信息就可以了

from exchangelib import Account, Message, Mailbox, HTMLBody, ServiceAccount
#忽略警告
import urllib3
urllib3.disable_warnings()

#报错处理:ConnectionError: HTTPConnectionPool(host='mail.xxx.com', port=443): Max retries exceeded with url: 
# import socket
# socket.create_connection((host, port), timeout=10)

def Email(to, subject, body):
 creds = ServiceAccount(username='域\名', password='密码')
 account = Account('发送的邮箱', credentials=creds, autodiscover=True)
 m = Message(account=account,subject=subject,body=HTMLBody(body),
to_recipients = [Mailbox(email_address=to)]
 )
 m.send()

Email("接收的邮箱", "邮件标题", "邮件内容")

安装库exchangelib

pip install exchangelib1

脚本内容

# coding=utf-8
#
# Created on 2018/2/


from exchangelib import DELEGATE, Account, Credentials, Configuration, NTLM, Message, Mailbox, HTMLBody
from exchangelib.protocol import BaseProtocol, NoVerifyHTTPAdapter


#此句用来消除ssl证书错误,exchange使用自签证书需加上
BaseProtocol.HTTP_ADAPTER_CLS = NoVerifyHTTPAdapter


# 输入你的域账号如example\leo
cred = Credentials(r'EXAMPLE\leo', '输入你的密码')

config = Configuration(server='输入邮箱服务器网页地址', credentials=cred, auth_type=NTLM)
a = Account(
primary_smtp_address='输入你要绑定的邮箱名(leo@example.com)', config=config, autodiscover=False, access_type=DELEGATE
)

# 此处为用来发送html格式邮件的文件路径
with open(r'C:\Users\leo\Desktop\1.html') as f:
msg = f.read().decode('utf-8')

m = Message(
account=a,
folder=a.sent,
subject=u'测试邮件',
body=HTMLBody(msg),
to_recipients=[Mailbox(email_address='输入你要绑定的邮箱名(leo@example.com)')]
)
m.send_and_save()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python开发WebService系列教程之REST,web.py,eurasia,Django
Jun 30 Python
python条件变量之生产者与消费者操作实例分析
Mar 22 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
Jun 14 Python
对Python3中dict.keys()转换成list类型的方法详解
Feb 03 Python
Python使用dict.fromkeys()快速生成一个字典示例
Apr 24 Python
Python获取数据库数据并保存在excel表格中的方法
Jun 12 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
Jun 12 Python
python字典嵌套字典的情况下找到某个key的value详解
Jul 10 Python
opencv转换颜色空间更改图片背景
Aug 20 Python
Python计算不规则图形面积算法实现解析
Nov 22 Python
python 给图像添加透明度(alpha通道)
Apr 09 Python
python openCV自制绘画板
Oct 27 Python
Python Unittest原理及基本使用方法
Nov 06 #Python
python中的yield from语法快速学习
Nov 06 #Python
Python通过字典映射函数实现switch
Nov 06 #Python
Python使用grequests并发发送请求的示例
Nov 05 #Python
Python 实现图片转字符画的示例(静态图片,gif皆可)
Nov 05 #Python
Python中常用的os操作汇总
Nov 05 #Python
Python Web项目Cherrypy使用方法镜像
Nov 05 #Python
You might like
用PHP实现 上一篇、下一篇的代码
2012/09/29 PHP
解析PHP多种序列化与反序列化的方法
2013/06/06 PHP
JavaScript创建命名空间的5种写法
2014/06/24 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
PHP实现的敏感词过滤方法示例
2019/03/06 PHP
jquery 新浪网易的评论块制作
2010/07/01 Javascript
用JS实现一个TreeMenu效果分享
2011/08/28 Javascript
Jvascript学习实践案例(开发常用)
2012/06/25 Javascript
Jquery中LigerUi的弹出编辑框(实现方法)
2013/07/09 Javascript
jquery提交form表单时禁止重复提交的方法
2014/02/13 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
2015/02/28 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
2015/08/18 Javascript
jQuery+css实现的tab切换标签(兼容各浏览器)
2016/01/28 Javascript
BootStrap智能表单实战系列(八)表单配置json详解
2016/06/13 Javascript
node使用UEditor富文本编辑器的方法实例
2017/07/11 Javascript
简单谈谈关于Angular Cli打包的事
2017/09/05 Javascript
一个有意思的鼠标点击文字特效jquery代码
2017/09/23 jQuery
关于Angularjs中自定义指令一些有价值的细节和技巧小结
2018/04/22 Javascript
微信小程序云开发获取文件夹下所有文件(推荐)
2019/11/14 Javascript
[04:59]DOTA2-DPC中国联赛 正赛 Ehome vs iG 选手采访
2021/03/11 DOTA
Python解决鸡兔同笼问题的方法
2014/12/20 Python
使用Python对IP进行转换的一些操作技巧小结
2015/11/09 Python
python实现文本界面网络聊天室
2018/12/12 Python
详解python中的time和datetime的常用方法
2019/07/08 Python
Python列表元素常见操作简单示例
2019/10/25 Python
JMS中Topic和Queue有什么区别
2013/05/15 面试题
Linux常见面试题
2013/03/18 面试题
会计学财务管理专业个人的自我评价
2013/10/19 职场文书
工业自动化专业毕业生推荐信
2013/11/18 职场文书
推广普通话标语
2014/06/27 职场文书
超市创意活动方案
2014/08/15 职场文书
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android
Spring Boot 实现敏感词及特殊字符过滤处理
2021/06/29 Java/Android
Android自定义双向滑动控件
2022/04/19 Java/Android
MySql数据库 查询时间序列间隔
2022/05/11 MySQL
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server