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的Crypto模块实现AES加密实例代码
Jan 22 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
Nov 06 Python
python 删除字符串中连续多个空格并保留一个的方法
Dec 22 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
Feb 16 Python
python算法与数据结构之单链表的实现代码
Jun 27 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
Oct 12 Python
python3 正则表达式基础廖雪峰
Mar 25 Python
Python视频编辑库MoviePy的使用
Apr 01 Python
Python Merge函数原理及用法解析
Sep 16 Python
python boto和boto3操作bucket的示例
Oct 30 Python
Python和Bash结合在一起的方法
Nov 13 Python
python中取整数的几种方法
Nov 07 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实现mysql同步的实现方法
2009/10/21 PHP
PHP中使用smarty生成静态文件的例子
2014/04/24 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
PHP基本语法实例总结
2016/09/09 PHP
iis 7下安装laravel 5.4环境的方法教程
2017/06/14 PHP
JavaScript类和继承 prototype属性
2010/09/03 Javascript
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
2011/07/11 Javascript
js this函数调用无需再次抓获id,name或标签名
2014/03/03 Javascript
jquery重复提交请求的原因浅析
2014/05/23 Javascript
使用 JavaScript 进行函数式编程 (一) 翻译
2015/10/02 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
jquery请求servlet实现ajax异步请求的示例
2017/06/03 jQuery
Vue中的ref作用详解(实现DOM的联动操作)
2017/08/21 Javascript
Nodejs中怎么实现函数的串行执行
2019/03/02 NodeJs
jquery实现广告上下滚动效果
2021/03/04 jQuery
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
[01:27:30]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
详解Python中列表和元祖的使用方法
2015/04/25 Python
Django接受前端数据的几种方法总结
2016/11/04 Python
Python实现删除文件中含“指定内容”的行示例
2017/06/09 Python
pandas 数据实现行间计算的方法
2018/06/08 Python
Django csrf 验证问题的实现
2018/10/09 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
2020/02/29 Python
Python 基于jwt实现认证机制流程解析
2020/06/22 Python
video实现有声音自动播放的实现方法
2020/05/20 HTML / CSS
Ann Taylor官方网站:美国最大的女性产品制造商之一
2016/09/14 全球购物
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
Java的接口和C++的虚类的相同和不同处
2014/03/27 面试题
经济类毕业生求职信
2014/06/26 职场文书
小学元宵节活动总结
2015/02/06 职场文书
高效课堂教学反思
2016/02/24 职场文书
创业不要错过,这4种餐饮新模式
2019/07/18 职场文书
Python基本的内置数据类型及使用方法
2022/04/13 Python
MySQL去除密码登录告警的方法
2022/04/20 MySQL