У меня есть следующая функция для отправки писем:
import logging
import os
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
import boto3
def send_email(body, subject, recipients, region_name='us-east-1',
sender='[email protected]', attachments=False):
logging.info('Generating email from {} to {} about {}'.format(sender,
str(recipients),
subject))
message = MIMEMultipart()
message['Subject'] = subject
message['From'] = sender
message['To'] = ', '.join(recipients)
logging.info('Adding attachments...')
if attachments:
for attachment in attachments:
logging.info('Adding ' + attachment)
f = open(os.path.normpath(attachment), 'rb')
a = MIMEApplication(f.read())
f.close()
a.add_header('Content-Disposition', 'attachment',
filename=os.path.basename(attachment))
message.attach(a)
logging.info('Attachment added!')
else:
logging.info('No attachments found!')
logging.info('Adding body...')
part = MIMEText(body, 'html')
message.attach(part)
client = boto3.client('ses', region_name=region_name)
logging.info('Sending...')
client.send_raw_email(
Source=message['From'],
Destinations=recipients,
RawMessage={
'Data': message.as_string()
}
)
logging.info('Sent!')
Это работает как шарм, и я использую его во множестве вариантов использования. Один из вариантов использования - отправить изображение в теле письма. Когда это происходит, я делаю что-то вроде этого:
send_email('''<img src="cid:{}" width={} height={}>'''.format(final_image_name,
width_of_new_image,
height_of_new_image),
'Email with body image', recipients,
attachments=['/tmp/{}'.format(final_image_name), ])
И это работает. Все идеально, когда вы открываете электронную почту на iPad, iPhone, в почтовом приложении или в Outlook для Mac. Однако ... ад начинается, когда мои коллеги открывают их в Outlook в Windows. Кто-то видит очень крошечные изображения, кто-то искажает изображение, кому-то нужно увеличить размер до 250%, кому-то, чтобы увидеть письмо в удобочитаемом размере. Поскольку это работает со всем остальным, за исключением Outlook в Windows, я должен предположить, что проблема здесь. Есть ли способ исправить это в коде? Есть ли настройка Outlook, чтобы предотвратить это? Большинство моих коллег используют Windows, поэтому мне нужна небольшая помощь.