Как насчет этой модификации?Я думаю, что по поводу загрузки с Google Drive, ваш скрипт правильный.Поэтому я хотел бы предложить изменить скрипт для отправки электронного письма с вложенным файлом.
Я подумал, что msg.set_payload(fh.read())
- одна из точек модификации, как вы говорите.Таким образом, данные, полученные с помощью getvalue()
, были преобразованы в email.encoders.encode_base64()
.А также я изменил message_obj
.
Модифицированный скрипт:
Пожалуйста, измените следующим образом.
С:
msg = MIMEText('test body')
message.attach(msg)
main_type, sub_type = content_type.split('/', 1)
msg = MIMEBase(main_type, sub_type)
msg.set_payload(fh.read()) # i suspect the issue is here
msg.add_header('Content-Disposition', 'attachment', filename='an example file name.pdf')
message.attach(msg)
message_obj = {'raw': base64.urlsafe_b64encode(message.as_string())}
service.users().messages().send(userId="me", body=message_obj).execute()
Кому:
from email import encoders # Please add this.
msg = MIMEText('test body')
message.attach(msg)
main_type, sub_type = content_type.split('/', 1)
msg = MIMEBase(main_type, sub_type)
msg.set_payload(fh.getvalue()) # Modified
encoders.encode_base64(msg) # Added
msg.add_header('Content-Disposition', 'attachment', filename='an example file name.pdf')
message.attach(msg)
message_obj = {'raw': base64.urlsafe_b64encode(message.as_bytes()).decode()} # Modified
service.users().messages().send(userId="me", body=message_obj).execute()
Примечание:
- Эта модификация предполагает, что вы уже смогли отправлять электронные письма с помощью Gmail API.Если вы не можете использовать Gmail API, подтвердите области действия и включите ли Gmail API на консоли API.
В моей среде я могу подтвердить, что измененный сценарий работает.Но если это не сработало в вашей среде, я прошу прощения.