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 相关文章推荐
使用Python3中的gettext模块翻译Python源码以支持多语言
Mar 31 Python
用Python编写一个基于终端的实现翻译的脚本
Apr 24 Python
Python实现合并字典的方法
Jul 07 Python
Python中常见的数据类型小结
Aug 29 Python
Python基础语言学习笔记总结(精华)
Nov 14 Python
Python中的单行、多行、中文注释方法
Jul 19 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
Dec 28 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
Feb 28 Python
Python实现动态给类和对象添加属性和方法操作示例
Feb 29 Python
OpenCV+python实现实时目标检测功能
Jun 24 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
Sep 23 Python
python Zmail模块简介与使用示例
Dec 19 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通过COM使用ADODB的简单例子
2006/12/31 PHP
php 多个submit提交表单 处理方法
2009/07/07 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
2012/03/26 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
2013/06/03 PHP
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
2014/06/23 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
2016/03/18 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
2016/12/15 PHP
统一接口:为FireFox添加IE的方法和属性的js代码
2007/03/25 Javascript
Javascript学习笔记7 原型链的原理
2010/01/11 Javascript
js抽奖实现随机抽奖代码效果
2013/12/02 Javascript
JQuery中阻止事件冒泡几种方式及其区别介绍
2014/01/15 Javascript
node.js中的fs.rmdirSync方法使用说明
2014/12/16 Javascript
nodejs实现获取当前url地址及url各种参数值
2015/06/25 NodeJs
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法
2016/12/07 Javascript
微信小程序 input输入及动态设置按钮的实现
2017/10/27 Javascript
Vue中 v-if 和v-else-if页面加载出现闪现的问题及解决方法
2018/10/12 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
2020/07/18 Javascript
[01:33]DOTA2上海特级锦标赛 LIQUID战队完整宣传片
2016/03/16 DOTA
零基础写python爬虫之使用urllib2组件抓取网页内容
2014/11/04 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
Python后台开发Django会话控制的实现
2019/04/15 Python
python中的错误如何查看
2020/07/08 Python
详解python实现可视化的MD5、sha256哈希加密小工具
2020/09/14 Python
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
2013/01/31 HTML / CSS
Net-A-Porter美国官网:全球时尚奢侈品名站
2017/02/11 全球购物
Lungolivigno Fashion官网:高级时装在线购物
2020/10/17 全球购物
新加坡鲜花速递/新加坡网上花店:Ferns N Petals
2020/08/29 全球购物
教师自荐信
2013/12/10 职场文书
九一八事变纪念日演讲稿
2014/09/14 职场文书
导游词之峨眉乐山/兵马俑/北京故宫御花园
2019/09/03 职场文书
bat批处理之字符串操作的实现
2022/03/16 Python