Python - Hidden Text / Html Mail

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
python1337
User
Beiträge: 5
Registriert: Freitag 7. Februar 2025, 15:10

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.
Benutzeravatar
grubenfox
User
Beiträge: 593
Registriert: Freitag 2. Dezember 2022, 15:49

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"
Benutzeravatar
__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
python1337
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^^
Benutzeravatar
sparrow
User
Beiträge: 4501
Registriert: Freitag 17. April 2009, 10:28

Was soll den "Hidden Text" sein? Und wie soll dich ausgerechnet das vor dem Spam bewahren?
Das klingt ehert nach einem falsch konfigurierten Mailserver. Oder eben nach Spam.
Benutzeravatar
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
python1337
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.
Benutzeravatar
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
Sirius3
User
Beiträge: 18216
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich vermute mal, das hat mit einer nicht-vertrauenswürdigen Ansendeaddresse zu tun. Hast Du einen seriösen Nailprovider über den Du die Emails versendest?
python1337
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
imonbln
User
Beiträge: 187
Registriert: Freitag 3. Dezember 2021, 17:07

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^^
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.

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.
python1337
User
Beiträge: 5
Registriert: Freitag 7. Februar 2025, 15:10

imonbln hat geschrieben: Samstag 8. Februar 2025, 11:52
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^^
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.

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.
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
imonbln
User
Beiträge: 187
Registriert: Freitag 3. Dezember 2021, 17:07

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
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!

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?
Benutzeravatar
sparrow
User
Beiträge: 4501
Registriert: Freitag 17. April 2009, 10:28

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 ;)
Benutzeravatar
Kebap
User
Beiträge: 760
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Für zukünftigen Vergleich mal sicherheitskopiert... :mrgreen:
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.
Benutzeravatar
__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
Antworten