python 使用exchange發送郵件


 

 

python常見函數運用

 

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生成一個可執行文件試試。

  1. 在命令提示符中去到要打包的目錄;
  2. 直接輸入"pyinstaller -F -w 文件名.py(F大寫);
  3. 文件目錄出現新的文件夾,里面就是打包好的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發送郵件

 

FYI: https://blog.csdn.net/LeoForBest/article/details/79429955

思而不學則殆
 

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()

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM