email mit Anhang versenden

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
muscat
User
Beiträge: 11
Registriert: Montag 27. März 2017, 07:32

hallo,

bin noch nicht so fit, und würde gerne eine email mit Anhang versenden.
Ich habe Python version 2.7.9 und folgendes script aus dem IN

Code: Alles auswählen

import smtplib
fromaddr = "*@gmail.com"
toaddrs = "*@gmail.com"

msg = "help I cannot send an attachment to save my life"
attachment = "/home/pi/v1.txt"
#print type (attachment)

username = "*@gmail.com"
password = "*"

server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg, attachment)
server.quit()
leider endet das script immer mit der Fehlermeldung:

Traceback (most recent call last):
File "*", line 15, in <module>
server.sendmail(fromaddr, toaddrs, msg, attachment)
File "/usr/lib/python2.7/smtplib.py", line 736, in sendmail
raise SMTPSenderRefused(code, resp, from_addr)
smtplib.SMTPSenderRefused: (555, '5.5.2 Syntax error. u145sm13059786wmu.1 - gsmtp', '*')

hat jemand eine Idee?

thanks georg
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Ich habe ja gewisse Zweifel daran, dass deine Mailadresse wirklich *@gmail.com ist.
muscat
User
Beiträge: 11
Registriert: Montag 27. März 2017, 07:32

hey /me

richtig, wollte meine Daten halt nicht offen legen. Im script stehen halt schon meine richtigen Daten. Wenn ich das attachmend lösche, arbeitet das script. Aber mit attachmend halt nicht.

mfg

georg
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@muscat: vielleicht solltest Du nicht die Syntax raten. Woher hast Du denn die absurde Idee, dass Attachements als vierter Parameter von sendmail angegeben werden könnten?
muscat
User
Beiträge: 11
Registriert: Montag 27. März 2017, 07:32

Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@muscat: bei Stackoverflow stellt jemand eine Frage und bekommt dann eine gewisse Anzahl an Antworten. Die Antwort mit den meisten Punkten steht dann ganz oben und ist dann nach Schwarmintelligenz die beste Antwort. Es macht wenig Sinn den fehlerhaften Code der Frage zu benutzen.
muscat
User
Beiträge: 11
Registriert: Montag 27. März 2017, 07:32

ok, danke.

werde es berücksichtigen.

habe mein kleines problem inzwischen auch gelöst.

mfg

georg
aaron
User
Beiträge: 92
Registriert: Donnerstag 1. Dezember 2016, 23:10

Es wäre super, wenn Du deine Lösung hier zeigen würdest.
muscat
User
Beiträge: 11
Registriert: Montag 27. März 2017, 07:32

hallo,

na klar. hier ist die datei. wenn es verbesserungen etc gibt, wäre ich natürlich auch interessiert.

Code: Alles auswählen

# holt von einer email das attachment und speichert es im ordner /home/pi.
# dabei wird die alte datei ueberschrieben-

import poplib
import email

server = poplib.POP3_SSL('pop.googlemail.com', '995')
server.user("user")
server.pass_("pass")

# get amount of new mails and get the emails for them
messages = [server.retr(n+1) for n in range(len(server.list()[1]))]

# for every message get the second item (the message itself) and convert it to a string with \n; then create python email with the strings
emails = [email.message_from_string('\n'.join(message[1])) for message in messages]

for mail in emails:
    # check for attachment;
    for part in mail.walk():
        if not mail.is_multipart():
            continue
        if mail.get('Content-Disposition'):
            continue
        file_name = part.get_filename()
        # check if email park has filename --> attachment part

        if file_name:
            file = open("/home/pi/"+file_name,'w+')
            file.write(part.get_payload(decode=True))
            file.close()
in der Vorschau zeigt er mir die Einrückungen an, aber nach dem Absenden nicht mehr?

mfg

georg
Zuletzt geändert von Anonymous am Dienstag 28. März 2017, 13:20, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@muscat: Dein gezeigt Code hat jetzt nur nichts mehr mit Senden sondern nur mit Empfangen zu tun. Zum Darstellen von Code im Forum gibt es die CodeBox, das Dropdown "Code auswählen" direkt über dem Editfeld.

continue sollte man vermeiden, und wie oft glaubst Du ist die Bedingung mail.is_multipart gültig, wenn sie schon beim ersten part nicht gültig war?
Du möchtest Dateien mit dem Modus "wb" und nicht "w+" öffnen. Die Frage ist, wie vertrauenswürdig sind Dateinamen in Emails, dass man sie so einfach irgendwohin auf der Platte speichern möchte.

Code: Alles auswählen

# holt von einer email das attachment und speichert es im ordner /home/pi.
# dabei wird die alte datei ueberschrieben-

import poplib
import email

server = poplib.POP3_SSL('pop.googlemail.com', '995')
server.user("user")
server.pass_("pass")

# get amount of new mails and get the emails for them
num_messages = len(server.list()[1])
messages = [server.retr(n) for n in range(1, num_messages+1)]

# for every message get the second item (the message itself) and convert it to a string with \n; then create python email with the strings
emails = [email.message_from_string('\n'.join(message[1])) for message in messages]

for mail in emails:
    # check for attachment;
    if mail.is_multipart() and mail.get('Content-Disposition'):
        for part in mail.walk():
            file_name = part.get_filename()
            # check if email park has filename --> attachment part

            if file_name:
                with open(os.path.join("/home/pi", os.path.basename(file_name)), 'wb') as output:
                    output.write(part.get_payload(decode=True))
Antworten