Ich versuche, HTML-E-Mails mit Base64 kodierten Bildern zu senden, die in ihnen eingebettet sind, mit Gmail API und Python.Base64-kodiertes Bild in E-Mail
Dies ist die HTML-Datei, die ich als E-Mail meine Codes senden möchten
<h1>This is a test message</h1>
<p>
<img src="data:image/png;base64,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">
</p>
Hier sind
"""Send an email message from the user's account.
"""
import base64
from email.mime.audio import MIMEAudio
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import mimetypes
import os
from apiclient import errors
def send_message(service, user_id, message):
"""Send an email message.
Args:
service: Authorized Gmail API service instance.
user_id: User's email address. The special value "me"
can be used to indicate the authenticated user.
message: Message to be sent.
Returns:
Sent Message.
"""
try:
message = (service.users().messages().send(userId=user_id, body=message)
.execute())
print 'Message Id: %s' % message['id']
return message
except errors.HttpError, error:
print 'An error occurred: %s' % error
def create_message(sender, to, subject, message_text):
"""Create a message for an email.
Args:
sender: Email address of the sender.
to: Email address of the receiver.
subject: The subject of the email message.
message_text: The text of the email message.
Returns:
An object containing a base64url encoded email object.
"""
message = MIMEText(message_text,'html')
message['to'] = to
message['from'] = sender
message['subject'] = subject
return {'raw': base64.urlsafe_b64encode(message.as_string())}
if __name__ == "__main__":
from login import service
with open("test.html","rb") as f:
message_body = f.read()
m = create_message("[email protected]","[email protected]","test message",message_body)
send_message(service, "me", m)
Allerdings sehe ich nicht mein Bild in der E-Mail-Inhalte. Wenn ich das Original inspiziere, kann ich sehen, dass mein HTML so falsch formatiert ist;
Content-Type: multipart/alternative; boundary=001a114442124f125f053789c367
--001a114442124f125f053789c367
Content-Type: text/plain; charset=UTF-8
This is a test message
--001a114442124f125f053789c367
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<h1>This is a test message</h1>
<p>
<img src=3D"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAMAA=
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3D">
</p>
--001a114442124f125f053789c367--
Wie Sie sehen können, gibt es eine 3D
in <img src=3D"data:image/png;base64 ...
Teil eingefügt.
Was ist der richtige Weg, um Bilder in E-Mails mit Google Mail API einzubetten?
Addition
Nach einer weiteren Untersuchung, ich habe erkannt, dass, wenn ich =3D
per E-Mail zurück zu =
konvertieren, Bild immer noch kaputt ist.
Ich denke, das Problem könnte mit der Tatsache zusammenhängen, dass meine Base64-codierten Daten in mehrere Zeilen im E-Mail-Quellcode aufgeteilt sind.
Die = 3D stammt von der inhaltscodierbaren Kodierung, die von E-Mail verwendet wird. Beachten Sie die "Content-Transfer-Encoding: quoted-printable" in Ihrer Nachricht. Aus dem Artikel http://girders.org/blog/2007/08/04/email-basics/ "Zoted-druckbare Codierung entkommt Sonderzeichen mit einem Gleichheitszeichen (=), gefolgt von der 2-stelligen hexadezimalen ASCII-Darstellung des Zeichens Zum Beispiel werden alle gleichwertigen Symbole im Body durch "= 3D" ersetzt, wobei 3D die hexadezimale Darstellung des Gleichheitszeichens in der ASCII-Sortierfolge ist. " – Quint
Wird das Bild in Gmail oder einem anderen Browser-basierten E-Mail-Client angezeigt? Wenn ja, dann liegt das Problem in Ihrem E-Mail-Client. Faustregel für E-Mails: Code HTML wie es ist 1995. – frnhr
@frnhr Weder Browser noch Thunderbird ist in der Lage, das Bild zu zeigen, obwohl ich das Bild in meiner Test-HTML-Datei sehen kann. – yasar