Python自动转发exchange邮件(exchangelib)
自动转发邮件,不作为附件
#导入exchangelib库模块 from exchangelib import NTLM, IMPERSONATION, Account, Credentials, Configuration, DELEGATE, Mailbox, Folder, Message, HTMLBody, FileAttachment, ItemAttachment from exchangelib.protocol import BaseProtocol, NoVerifyHTTPAdapter import sys,base64,time,random import requests, urllib3 from datetime import datetime,timedelta #定义个人隔离区邮件密送邮箱地址、账号、密码,用于读取该邮箱邮件 usermail = "username@yx.com" username_appimp = "domain\\username" password_appimp = "password" mail_server = "mail.yx.com" ######### 取消SSL安全连接警告 ##################################### urllib3.disable_warnings() # Tell exchangelib to use this adapter class instead of the default # exchangelib provides a sample adapter which ignores TLS validation errors. # Use at own risk. NTML is NT LAN Manager. BaseProtocol.HTTP_ADAPTER_CLS = NoVerifyHTTPAdapter ######### 取消SSL安全连接警告 ##################################### #通过EWS连接到Exchange credentials = Credentials(username=username_appimp, password=password_appimp) config = Configuration(server=mail_server, credentials=credentials, auth_type = NTLM, max_connections=3) try: account = Account( primary_smtp_address=usermail, autodiscover=False, config=config, access_type=DELEGATE, #IMPERSONATION, ) except Exception as e: print(f'Error with connect to Exchange,Exit: {e}') exit(1) # print(account) def forward_email(original_message, forward_to_emails): """ 转发邮件,原始邮件内容不作为附件 Parameters: original_message: 原始邮件对象 forward_to_emails: 转发目标邮箱列表 """ # from_sender = original_message.sender.name if original_message.sender else '未知' # to_recipients = ','.join([recipient.name for recipient in original_message.to_recipients]) # cc_recipients = ','.join([recipient.name for recipient in original_message.cc_recipients]) if original_message.cc_recipients else " " # send_time = original_message.datetime_received.strftime('%Y-%m-%d %H:%M:%S') forward_body = original_message.body if original_message.body else original_message.text_body # # 构建转发邮件内容 # forward_body = f''' # {mail_body} # ''' # 创建转发邮件 forward_msg = Message( account=original_message.account, folder=original_message.account.sent, subject=f"转发: {original_message.subject}", body=HTMLBody(forward_body), to_recipients=[Mailbox(email_address=email) for email in forward_to_emails] ) attachment_count = 0 for attachment in original_message.attachments: if isinstance(attachment, FileAttachment): # if self._is_signature_attachment(attachment): # signature_attachment_count += 1 # continue # 创建新的附件对象 new_attachment = FileAttachment( name=attachment.name, content_type=attachment.content_type, content=attachment.content, content_id=attachment.content_id, # 保留 content_id 用于 cid 引用 is_inline=attachment.is_inline # 保留是否内嵌 ) forward_msg.attachments.append(new_attachment) attachment_count += 1 # 发送邮件 forward_msg.send_and_save() print(f"邮件已成功转发至: {', '.join(forward_to_emails)}") #遍历exchange的隔离区邮箱,获取5分钟前 - 最近24小时内的邮件 end = (datetime.now() - timedelta(minutes=0)).replace(tzinfo=account.default_timezone) start = (datetime.now() - timedelta(hours=100)).replace(tzinfo=account.default_timezone) filter_items = account.inbox.all().filter(datetime_received__range=(start, end)) print(f'待处理邮件数量: {filter_items.count()} 封') if filter_items.count() > 0: print(f'待处理邮件数量: {filter_items.count()} 封,开始处理') i = 1 for item in filter_items[:3]: print(item.sender.email_address) print(item.subject) forward_email( original_message=item, forward_to_emails=["48359@qq.com", "mom@163.com"] )
浙公网安备 33010602011771号