now = datetime.datetime.now().time() # 获取当前时间 if now >= datetime.time(8, 0, 0) and now <= datetime.time(19, 0, 0): # 当前时间在08:00到19:00之间 img_path = 'D:\出勤人力白班.PNG' else: # 当前时间不在08:00到19:00之间 img_path = 'D:\出勤人力夜班.PNG' # 打开 Excel 文件 wb = openpyxl.load_workbook(r'D:\出勤匯總\郵件.xlsx') # 选择工作表 ws = wb.active # 读取一列数据并生成列表郵件收件人 recipients = [] for cell in ws['A']: recipients.append(cell.value) # 读取一列数据并生成列表郵件CC recipients1 = [] for cell in ws['B']: recipients1.append(cell.value) # 使用 Outlook API 发送电子邮件 outlook = win32com.client.Dispatch('Outlook.Application') mail = outlook.CreateItem(0) mail.To = ";".join(recipients) mail.CC = ";".join(recipients1) mail.Subject = '自動報告5 出勤人力' # 添加图片到正文中 attachment = mail.Attachments.Add(img_path, 6, 0) html_body = f'<html><body><h2>Dear sir:</h2><p>如下為每日加班管控明細,還請查閲,tks!!!</p><img src="cid:{attachment.FileName}"></body></html>' mail.HTMLBody = html_body attachment = mail.Attachments.Addr("D:\出勤匯總\SMT部編制人力.xlsm") mail.Send() 報TypeError: sequence item 1: expected str instance, NoneType found怎麽修改
时间: 2024-03-20 12:43:48 浏览: 93
Java 8新时间日期库java.time的使用示例
这个错误是因为 `mail.Attachments.Add()` 方法返回的是 `None`,而你把它赋值给了 `attachment` 变量。所以在后面调用 `mail.Attachments.Addr()` 方法时,出现了类型错误。
可以将 `mail.Attachments.Add()` 方法的返回值直接作为参数传递给 `mail.Attachments.Addr()` 方法,就可以解决这个问题。修改后的代码如下:
```python
now = datetime.datetime.now().time() # 获取当前时间
if now >= datetime.time(8, 0, 0) and now <= datetime.time(19, 0, 0):
# 当前时间在08:00到19:00之间
img_path = 'D:\出勤人力白班.PNG'
else:
# 当前时间不在08:00到19:00之间
img_path = 'D:\出勤人力夜班.PNG'
# 打开 Excel 文件
wb = openpyxl.load_workbook(r'D:\出勤匯總\郵件.xlsx')
# 选择工作表
ws = wb.active
# 读取一列数据并生成列表郵件收件人
recipients = []
for cell in ws['A']:
recipients.append(cell.value)
# 读取一列数据并生成列表郵件CC
recipients1 = []
for cell in ws['B']:
recipients1.append(cell.value)
# 使用 Outlook API 发送电子邮件
outlook = win32com.client.Dispatch('Outlook.Application')
mail = outlook.CreateItem(0)
mail.To = ";".join(recipients)
mail.CC = ";".join(recipients1)
mail.Subject = '自動報告5 出勤人力'
# 添加图片到正文中
attachment = mail.Attachments.Add(img_path, 6, 0)
html_body = f'<html><body><h2>Dear sir:</h2><p>如下為每日加班管控明細,還請查閲,tks!!!</p><img src="cid:{attachment.FileName}"></body></html>'
mail.HTMLBody = html_body
# 添加附件
mail.Attachments.Add("D:\出勤匯總\SMT部編制人力.xlsm")
# 发送邮件
mail.Send()
```
注意,修改后的代码中,我把 `mail.Attachments.Addr()` 方法的调用删除了。因为这个方法的作用是添加附件,而你已经调用了 `mail.Attachments.Add()` 方法添加了附件,所以这里就不需要再添加了。
阅读全文