Hallo,
Ich habe ein Python tool worüber ich Emails senden möchte.
ich möchte einen hidden text innerhalb einer html mail versenden ohne das der plaintext angezeigt wird - Aktuell landen meine Emails im Spam, daher möchte ich versuchen, das die Emails nicht mehr im Spam landen.
Ich hoffe mir kann jemand helfen, vielen dank.
Python - Hidden Text / Html Mail
Da man als Absender IMHO nur raten kann warum die Mail beim Empfänger im Spam-Ordner landet... rate ich mal. Vielleicht hilft "keine html mail senden"
_______________________________________________________________________________
https://www.python-kurs.eu/index.php
https://learnxinyminutes.com/docs/python/ https://learnxinyminutes.com/docs/de-de/python-de/
https://quickref.me/python https://docs.python-guide.org/
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Oder keinen Spam senden. 
“I am Dyslexic of Borg, Your Ass will be Laminated” — unknown
-
- User
- Beiträge: 5
- Registriert: Freitag 7. Februar 2025, 15:10
Das ding ist, wenn ich web / gmx emails nehme, lande ich überall inbox - Wenn ich eine Domain nutze die zb lautet python@python.de - Lande ich nicht Inbox - Zumindest nicht bei web / gmx / tonline. Daher die frage^^
- noisefloor
- User
- Beiträge: 4149
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
das hat ziemlich sicher nicht mit Python zu tun, sondern mit den Einstellungen deines Mailproviders. Warum bestimmte Mails weg sortiert werden kann dir am Ende nur dein Provider sagen. Das muss auch nicht am Inhalt liegen, sondern einfach an der IP-Adresse oder der Adresse, von der die Mail gesendet wird.
Gruß, noisefloor
das hat ziemlich sicher nicht mit Python zu tun, sondern mit den Einstellungen deines Mailproviders. Warum bestimmte Mails weg sortiert werden kann dir am Ende nur dein Provider sagen. Das muss auch nicht am Inhalt liegen, sondern einfach an der IP-Adresse oder der Adresse, von der die Mail gesendet wird.
Gruß, noisefloor
-
- User
- Beiträge: 5
- Registriert: Freitag 7. Februar 2025, 15:10
Naja, also das ding ist, es ist kein Spam. Mit dem selben Setup lande ich ja bei Corp Mails Inbox ohne Probleme. Das liegt also eher am Python Script - Das eben erkannt wird das wir eine HTML mail versenden - Mit Hidden Texten würde man da einfacher ran kommen.
Wenn man zb einen Hidden Text sendet - Wird die HTML mail auch anders angezeigt.
Das Problem ist ja, das ich mit gewöhnlichen Corp Mails bei CORP mails auch Inbox lande. Habe es mit einer Corp Mail versucht in der ich eine Html mail sende ( alle Html Inhalte sind auf eigenen Servern gehostet wie zb die Bilder Logos etc ) - Aber da lande ich im Spamm bei web zb.
Wenn man zb einen Hidden Text sendet - Wird die HTML mail auch anders angezeigt.
Das Problem ist ja, das ich mit gewöhnlichen Corp Mails bei CORP mails auch Inbox lande. Habe es mit einer Corp Mail versucht in der ich eine Html mail sende ( alle Html Inhalte sind auf eigenen Servern gehostet wie zb die Bilder Logos etc ) - Aber da lande ich im Spamm bei web zb.
- noisefloor
- User
- Beiträge: 4149
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Ich denke, die denkst falsch. Der empfangenden Mail Server sieht nicht, _wie_ die Mail generiert wurde. Der sieht, über welche Mail Server die Mail kommt und sieht den Inhalt. Danach geht der Spam-Filter. Und nochmal: es kommt drauf an, wie der Admin des empfangenden Servers diesen konfiguriert hat. Das hat erstmal nicht mit "Corp Mails" (was auch immer das genau sein soll...) oder so zu tun.
Gruß, noisefloor
Gruß, noisefloor
-
- User
- Beiträge: 5
- Registriert: Freitag 7. Februar 2025, 15:10
So sieht das ganze ungefähr aus :
def send_email(recipient, subject, html_content):
try:
# Ersetze Bild-URLs in der HTML-Vorlage, sodass diese auf die Content-IDs zeigen
html_content = html_content.replace('src="logo.png"', 'src="cid:logo_img" alt="Firmenlogo"')
html_content = html_content.replace('src="banner.png"', 'src="cid:banner_img" alt="Firmenbanner"')
# Erstelle den äußeren Container als "related", um Inline-Bilder zu ermöglichen
message = MIMEMultipart("related")
message["From"] = f"Comdirect <{FROM_EMAIL}>"
message["To"] = recipient
message["Subject"] = subject
# Erstelle einen multipart/alternative-Container für die reinen Text- und HTML-Versionen
alternative_part = MIMEMultipart("alternative")
# Erzeuge den Plain-Text-Inhalt (sollte möglichst den wesentlichen Inhalt widerspiegeln)
plain_text = (
"Sehr geehrte ,\n\n"
"Wir bitten um Ihr Verständnis und bedanken uns für Ihre Mithilfe, unser Online Angebot so sicher wie möglich zu gestalten.\n\n"
"Mit freundlichen Grüßen,\n"
"Thomas Schaufler\n"
)
# Füge zuerst den Plain-Text und dann den HTML-Teil hinzu (dabei wird in HTML-fähigen Clients der HTML-Teil angezeigt)
alternative_part.attach(MIMEText(plain_text, "plain"))
alternative_part.attach(MIMEText(html_content, "html"))
# Hänge den alternative Part an den Hauptcontainer
message.attach(alternative_part)
# Lade die Inline-Bilder (logo.png und banner.png) aus dem BASE_DIR und hänge sie als Attachment an
logo_path = os.path.join(BASE_DIR, "logo.png")
banner_path = os.path.join(BASE_DIR, "banner.png")
# Logo einbetten
with open(logo_path, "rb") as f:
logo_data = f.read()
logo_img = MIMEImage(logo_data)
logo_img.add_header("Content-ID", "<logo_img>")
logo_img.add_header("Content-Disposition", "inline", filename="logo.png")
message.attach(logo_img)
# Banner einbetten
with open(banner_path, "rb") as f:
banner_data = f.read()
banner_img = MIMEImage(banner_data)
banner_img.add_header("Content-ID", "<banner_img>")
banner_img.add_header("Content-Disposition", "inline", filename="banner.png")
message.attach(banner_img)
# Aufbau der Verbindung zum SMTP-Server, Start von TLS, Login und Versand der E-Mail
with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
server.starttls()
server.login(SMTP_USER, SMTP_PASS)
server.sendmail(SMTP_USER, recipient, message.as_string())
print(f"E-Mail an {recipient} erfolgreich gesendet.")
except Exception as e:
print(f"Fehler beim Senden an {recipient}: {e}")
- wie kann ich in meiner send mail logik einen plain text mit einbauen das ich meine mail in html und plain text gleichzeitig über mime sende
ich habe es jetzt mit mehreren ansätzen probiert aber leider sehe ich beim empfangen der nachricht das nur der html teil geladen wird und ich bei mail-tester.com 0% Text in der Email habe
def send_email(recipient, subject, html_content):
try:
# Ersetze Bild-URLs in der HTML-Vorlage, sodass diese auf die Content-IDs zeigen
html_content = html_content.replace('src="logo.png"', 'src="cid:logo_img" alt="Firmenlogo"')
html_content = html_content.replace('src="banner.png"', 'src="cid:banner_img" alt="Firmenbanner"')
# Erstelle den äußeren Container als "related", um Inline-Bilder zu ermöglichen
message = MIMEMultipart("related")
message["From"] = f"Comdirect <{FROM_EMAIL}>"
message["To"] = recipient
message["Subject"] = subject
# Erstelle einen multipart/alternative-Container für die reinen Text- und HTML-Versionen
alternative_part = MIMEMultipart("alternative")
# Erzeuge den Plain-Text-Inhalt (sollte möglichst den wesentlichen Inhalt widerspiegeln)
plain_text = (
"Sehr geehrte ,\n\n"
"Wir bitten um Ihr Verständnis und bedanken uns für Ihre Mithilfe, unser Online Angebot so sicher wie möglich zu gestalten.\n\n"
"Mit freundlichen Grüßen,\n"
"Thomas Schaufler\n"
)
# Füge zuerst den Plain-Text und dann den HTML-Teil hinzu (dabei wird in HTML-fähigen Clients der HTML-Teil angezeigt)
alternative_part.attach(MIMEText(plain_text, "plain"))
alternative_part.attach(MIMEText(html_content, "html"))
# Hänge den alternative Part an den Hauptcontainer
message.attach(alternative_part)
# Lade die Inline-Bilder (logo.png und banner.png) aus dem BASE_DIR und hänge sie als Attachment an
logo_path = os.path.join(BASE_DIR, "logo.png")
banner_path = os.path.join(BASE_DIR, "banner.png")
# Logo einbetten
with open(logo_path, "rb") as f:
logo_data = f.read()
logo_img = MIMEImage(logo_data)
logo_img.add_header("Content-ID", "<logo_img>")
logo_img.add_header("Content-Disposition", "inline", filename="logo.png")
message.attach(logo_img)
# Banner einbetten
with open(banner_path, "rb") as f:
banner_data = f.read()
banner_img = MIMEImage(banner_data)
banner_img.add_header("Content-ID", "<banner_img>")
banner_img.add_header("Content-Disposition", "inline", filename="banner.png")
message.attach(banner_img)
# Aufbau der Verbindung zum SMTP-Server, Start von TLS, Login und Versand der E-Mail
with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
server.starttls()
server.login(SMTP_USER, SMTP_PASS)
server.sendmail(SMTP_USER, recipient, message.as_string())
print(f"E-Mail an {recipient} erfolgreich gesendet.")
except Exception as e:
print(f"Fehler beim Senden an {recipient}: {e}")
- wie kann ich in meiner send mail logik einen plain text mit einbauen das ich meine mail in html und plain text gleichzeitig über mime sende
ich habe es jetzt mit mehreren ansätzen probiert aber leider sehe ich beim empfangen der nachricht das nur der html teil geladen wird und ich bei mail-tester.com 0% Text in der Email habe
Das liegt an dem Empfänger! Die Zeiten wo mein einfach irgendein E-Mail Server, Mails für alle Domains vor die Füße Kotzen kann sind lange vorbei. Vielleicht fehlt dir der DKIM und oder der passende SPF für python.de, dann bist du Spam egal wie deine E-Mail aussieht.python1337 hat geschrieben: ↑Freitag 7. Februar 2025, 20:47 Das ding ist, wenn ich web / gmx emails nehme, lande ich überall inbox - Wenn ich eine Domain nutze die zb lautet python@python.de - Lande ich nicht Inbox - Zumindest nicht bei web / gmx / tonline. Daher die frage^^
Auf jeden Fall hat das nichts mit Python oder Irgendwelche hidden Text zu tun (was immer das sein soll), sondern mit dem Medium E-Mail.
-
- User
- Beiträge: 5
- Registriert: Freitag 7. Februar 2025, 15:10
Naja - Das es am Empfänger liegt, denke ich nicht. Ich kann ja auch easy ( An Corp Emails = Geschäftliche Emails Inbox senden ) - Daher ist das ganze ziemlich weirdimonbln hat geschrieben: ↑Samstag 8. Februar 2025, 11:52Das liegt an dem Empfänger! Die Zeiten wo mein einfach irgendein E-Mail Server, Mails für alle Domains vor die Füße Kotzen kann sind lange vorbei. Vielleicht fehlt dir der DKIM und oder der passende SPF für python.de, dann bist du Spam egal wie deine E-Mail aussieht.python1337 hat geschrieben: ↑Freitag 7. Februar 2025, 20:47 Das ding ist, wenn ich web / gmx emails nehme, lande ich überall inbox - Wenn ich eine Domain nutze die zb lautet python@python.de - Lande ich nicht Inbox - Zumindest nicht bei web / gmx / tonline. Daher die frage^^
Auf jeden Fall hat das nichts mit Python oder Irgendwelche hidden Text zu tun (was immer das sein soll), sondern mit dem Medium E-Mail.
Des Menschen glaube, ist sein Himmelreich! Du kannst es natürlich Wired finden, dass es manches Mal klappt und fest mit dem Fuß auf den Boden stampfen und sagen ich will aber!python1337 hat geschrieben: ↑Samstag 8. Februar 2025, 12:06 Naja - Das es am Empfänger liegt, denke ich nicht. Ich kann ja auch easy ( An Corp Emails = Geschäftliche Emails Inbox senden ) - Daher ist das ganze ziemlich weird
Nur wenn du dein Thread nochmal von liest, sagen dir die üblichen verdächtigen, die normalerweise jedes Pythonproblem lösen, du hast kein Python Problem, sondern ein E-Mail Problem. Von daher dein MUA (Mail User Agent, das Pythonskript) hast du jetzt betrachtet, das nächste Glied in der Kette ist der MTA, was macht dich so sicher das hier nicht das Problem liegt?
Und bei dem Mailtext gehe ich jetzt einfach mal davon aus, dass das durchaus Spam - wenn nicht sogar Phishing. Also ist das doch genau richtig, dass es nicht ankommt.
Sieht in meinen Augen aus als würde ein Script-Kiddie gerne Phishing-Mails verschicke, versteht aber nicht, wie MTAs funktionieren.
So einfach ist es halt nicht, sich als Bank auszugeben
Sieht in meinen Augen aus als würde ein Script-Kiddie gerne Phishing-Mails verschicke, versteht aber nicht, wie MTAs funktionieren.
So einfach ist es halt nicht, sich als Bank auszugeben

Für zukünftigen Vergleich mal sicherheitskopiert...

python1337 hat geschrieben: ↑Samstag 8. Februar 2025, 11:37 So sieht das ganze ungefähr aus :
Code: Alles auswählen
def send_email(recipient, subject, html_content): try: # Ersetze Bild-URLs in der HTML-Vorlage, sodass diese auf die Content-IDs zeigen html_content = html_content.replace('src="logo.png"', 'src="cid:logo_img" alt="Firmenlogo"') html_content = html_content.replace('src="banner.png"', 'src="cid:banner_img" alt="Firmenbanner"') # Erstelle den äußeren Container als "related", um Inline-Bilder zu ermöglichen message = MIMEMultipart("related") message["From"] = f"Comdirect <{FROM_EMAIL}>" message["To"] = recipient message["Subject"] = subject # Erstelle einen multipart/alternative-Container für die reinen Text- und HTML-Versionen alternative_part = MIMEMultipart("alternative") # Erzeuge den Plain-Text-Inhalt (sollte möglichst den wesentlichen Inhalt widerspiegeln) plain_text = ( "Sehr geehrte ,\n\n" "Wir bitten um Ihr Verständnis und bedanken uns für Ihre Mithilfe, unser Online Angebot so sicher wie möglich zu gestalten.\n\n" "Mit freundlichen Grüßen,\n" "Thomas Schaufler\n" ) # Füge zuerst den Plain-Text und dann den HTML-Teil hinzu (dabei wird in HTML-fähigen Clients der HTML-Teil angezeigt) alternative_part.attach(MIMEText(plain_text, "plain")) alternative_part.attach(MIMEText(html_content, "html")) # Hänge den alternative Part an den Hauptcontainer message.attach(alternative_part) # Lade die Inline-Bilder (logo.png und banner.png) aus dem BASE_DIR und hänge sie als Attachment an logo_path = os.path.join(BASE_DIR, "logo.png") banner_path = os.path.join(BASE_DIR, "banner.png") # Logo einbetten with open(logo_path, "rb") as f: logo_data = f.read() logo_img = MIMEImage(logo_data) logo_img.add_header("Content-ID", "<logo_img>") logo_img.add_header("Content-Disposition", "inline", filename="logo.png") message.attach(logo_img) # Banner einbetten with open(banner_path, "rb") as f: banner_data = f.read() banner_img = MIMEImage(banner_data) banner_img.add_header("Content-ID", "<banner_img>") banner_img.add_header("Content-Disposition", "inline", filename="banner.png") message.attach(banner_img) # Aufbau der Verbindung zum SMTP-Server, Start von TLS, Login und Versand der E-Mail with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server: server.starttls() server.login(SMTP_USER, SMTP_PASS) server.sendmail(SMTP_USER, recipient, message.as_string()) print(f"E-Mail an {recipient} erfolgreich gesendet.") except Exception as e: print(f"Fehler beim Senden an {recipient}: {e}")
- wie kann ich in meiner send mail logik einen plain text mit einbauen das ich meine mail in html und plain text gleichzeitig über mime sende
ich habe es jetzt mit mehreren ansätzen probiert aber leider sehe ich beim empfangen der nachricht das nur der html teil geladen wird und ich bei mail-tester.com 0% Text in der Email habe
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Da sind sowohl Daten als auch Code redundant, und statt `os.path` würde man in neuem Code eher `pathlib` verwenden. Zudem gehört die Ausnahmebehandlung und die `print()`-Ausgaben nicht dort rein.
Code: Alles auswählen
import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from pathlib import Path
BASE_DIR = Path(".")
FROM_EMAIL = "sender@domain.abc"
SMTP_SERVER = "…"
SMTP_PORT = 443
SMTP_USER = "…"
SMTP_PASS = "…"
def send_email(recipient, subject, html_content):
images_data = [
("logo.png", "logo_img", "Firmenlogo"),
("banner.png", "banner_img", "Firmenbanner"),
]
for filename, id_, description in images_data:
html_content = html_content.replace(
f'src="{filename}"', f'src="cid:{id_}" alt="{description}"'
)
message = MIMEMultipart("related")
message["From"] = f"Comdirect <{FROM_EMAIL}>"
message["To"] = recipient
message["Subject"] = subject
alternative_part = MIMEMultipart("alternative")
alternative_part.attach(
MIMEText(
(
"Sehr geehrte *,\n\n"
"Wir bitten um Ihr Verständnis und bedanken uns für Ihre"
" Mithilfe, unser Online-Angebot so sicher wie möglich zu"
" gestalten.\n\n"
"Mit freundlichen Grüßen,\n"
"Thomas Schaufler\n"
),
"plain",
)
)
alternative_part.attach(MIMEText(html_content, "html"))
message.attach(alternative_part)
for filename, id_, _ in images_data:
mime_image = MIMEImage((BASE_DIR / filename).read_bytes())
mime_image.add_header("Content-ID", f"<{id_}>")
mime_image.add_header(
"Content-Disposition", "inline", filename=filename
)
message.attach(mime_image)
with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
server.starttls()
server.login(SMTP_USER, SMTP_PASS)
server.sendmail(SMTP_USER, recipient, message.as_string())
“I am Dyslexic of Borg, Your Ass will be Laminated” — unknown