热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

这篇文章主要介绍了python基于exchange函数发送邮件过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,

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:Python27Libsite-packagesPyQt4>pyuic4 E:pyDemoproTools.ui -o proTools.py

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

代码打包:C:Python27Scripts>python pyinstaller-script.py -w E:pyDemoPyQt estPyQt.py testPyQt.spec

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

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

-i 加图标

pyinstaller -i D:ALIX_SH2carReportyx.ico -W D:ALIX_SH2carReportupload2carReport.py

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

pyinstaller -i D:ALIX_SH2carReportyx.ico -F -w D:ALIX_SH2carReportupload2carReport.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 
  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 "", line 1, in 
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,搞定!

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


# 输入你的域账号如exampleleo
cred = Credentials(r"EXAMPLEleo", "输入你的密码")

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:UsersleoDesktop1.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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程笔记。

原文链接:https://www.cnblogs.com/xinxihua/p/13894632.html


推荐阅读
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • JavaScript中属性节点的类型及应用
    本文深入探讨了JavaScript中属性节点的不同类型及其在实际开发中的应用,帮助开发者更好地理解和处理HTML元素的属性。通过具体的案例和代码示例,我们将详细解析如何操作这些属性节点。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
author-avatar
我我檬檬我我186
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有