#python #python-3.x #email #outlook #amazon-ses
#python #python-3.x #Адрес электронной почты #outlook #amazon-ses
Вопрос:
У меня есть следующая функция для отправки электронных писем:
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='default@sender.com', 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, приложении Mail и Outlook для Mac. Однако… весь ад вырывается на свободу, когда мои коллеги открывают их в Outlook в Windows. Некоторые видят очень крошечные изображения, некоторые получают искаженные изображения, некоторым нужно сделать 250%, чтобы увидеть электронное письмо в удобочитаемом размере. Поскольку это работает со всем остальным, за исключением Outlook в Windows, я должен предположить, что проблема есть. Есть ли способ исправить это в коде? Есть ли настройка Outlook для предотвращения этого? Большинство моих коллег используют Windows, поэтому мне нужна небольшая помощь.
Ответ №1:
У меня нет Outlook, поэтому я не могу воспроизвести проблему.
Попробуйте добавить кавычки и px
атрибуты width и height, например:
send_email('''<img src="cid:{}" width="{}px" height="{}px">'''.format(final_image_name,
width_of_new_image,
height_of_new_image),
'Email with body image', recipients,
attachments=['/tmp/{}'.format(final_image_name), ])
Может быть, Outlook уменьшает изображение, чтобы оно помещалось в окне?
Попробуйте обернуть img
тег в a div
и задать минимальную ширину / высоту.
html_str = f'''<div style="width: 100%; min-width: {width_of_new_image}px; height: 100%; min-height: {height_of_new_image}px;"><img src="cid:{final_image_name}" width="{width_of_new_image}px" height="{height_of_new_image}px"></div>'''
send_email(html_str, 'Email with body image', recipients, attachments=['/tmp/{}'.format(final_image_name), ])
Приведенный выше код должен выдавать что-то вроде этого:
<div style="width: 100%; min-width: 800px; height: 100%; min-height: 600px;"><img src="cid:imagename" width="800px" height="600px"></div>