Seite 1 von 1
E-Mail mit Anhang
Verfasst: Donnerstag 14. Januar 2010, 23:38
von obelisk.asterisk
Hallo Python Forum,
ich möchte eine E-Mail über smtplib versenden.
Mein Problem wie kann man einen String übergeben an die Methode sendmail des Moduls smtplib und versenden.
Code: Alles auswählen
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.mime.text import MIMEText
msg = MIMEMultipart()
msg["Subject"] = "Hallo Testmail"
msg["From"] = "Obelisk <obelisk@asterisk.de>"
msg["To"] = "Asterisk <asterisk@obelisk.de>"
text = MIMEText("Obelisk und Asterisk im Anhang")
msg.attach(text)
csv = open("/home/user/script/das_zu_versendete_script_.csv")
datei = MIMEText(csv.read())
csv.close()
msg.attach(datei)
print msg.as_string()
Bedanke mich im vorraus
obelisk.asterisk

1. Versuch
Verfasst: Freitag 15. Januar 2010, 00:01
von obelisk.asterisk
Hallo,
1. Versuch gescheitert warum??????
Code: Alles auswählen
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.mime.text import MIMEText
msg = MIMEMultipart()
msg["Subject"] = "Hallo Testmail"
msg["From"] = "Obelisk <obelisk@asterisk.de>"
msg["To"] = "Asterisk <asterisk@obelisk.de>"
text = MIMEText("Obelisk und Asterisk im Anhang")
msg.attach(text)
csv = open("/home/user/script/das_zu_versendete_script_.csv")
datei = MIMEText(csv.read())
csv.close()
msg.attach(datei)
print msg.as_string()
msg = smtplib.SMTP("mail.astobelisk.de")
msg.login("USERNAME", "USERPASSWORD")
(235, '2.0.0 Authentication successfull')
msg.sendmail(
"obelisk <obelisk@asterisk.de>",
"asterisk<asterisk@obelisk.de>",
"BLA BLA BLA",)
{}
msg.quit()

Verfasst: Freitag 15. Januar 2010, 06:18
von nemomuk
Am besten verweise ich gleich auf gerold's simplemail:
http://www.python-forum.de/topic-3158.html
Skript hilfe
Verfasst: Montag 18. Januar 2010, 18:01
von obelisk.asterisk
Hallo,
danke für die Hilfe ich habe mir das Modul angeschaut.
Das ist genau das was ich gesucht habe.
Ich habe mir den text kopiert, irgendwie läuft es nicht.
Bedanke mich schon im vorraus für die hilfe.
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: utf-8 -*-
#simplemail iportieren
from simplemail import Email
email = Email(
smtp_server = "mailserver.de",
smtp_user = "mailuser",
smtp_password = "passwordxxxxxxxxxxxx"
)
# Absender
email.from_address = "meine.blabla@das.de"
# Empfaenger
email.recipients.add("empfänger@dies.de")
# Betreff
email.subject = "TEXT_TEXT"
# Nachricht
email.message = \
"Hallo erst mal\n" + \
"\n" + \
"wie geht es dir\n" + \
"\n" + \
"Gruß\n" + \
"ast\n" + \
":-)"
# Anhaenge
email.attachments.add_filename("/tmp/anhang/datei_für_den_anhang.csv")
# Senden
if email.send():
print "Nachricht gesendet"
else:
print "Die Nachricht wurde nicht versendet"
Kann mir jemand helfen ?
Bedanke mich im vorraus.
obelisk.asterisk

Verfasst: Montag 18. Januar 2010, 18:06
von Masaru
.... irgendwie läuft es nicht?
Was passiert denn genau?
- - macht Dein DVD Laufwerk so komische Geräusche, als ob Du einer Katze auf den Schwanz getreten wärst?
- kommen so komische Rauchzeichen aus den Öffnungsschlitzen Deines Monitors, die nach dem MC-Donlad Zeichen aussehen?
- versucht Deine Maus sich selbstständig zu machen, um Dir Käse aus dem Kühlschrank zu stehlen?
>>Masaru<<
mail
Verfasst: Montag 18. Januar 2010, 21:29
von obelisk.asterisk
Beim ausführen des Skripts sagt er das es das simplemail modul nicht gibt.
Re: mail
Verfasst: Montag 18. Januar 2010, 21:36
von gerold
obelisk.asterisk hat geschrieben:Beim ausführen des Skripts sagt er das es das simplemail modul nicht gibt.
Hallo obelisk.asterisk!
Entschuldige bitte meine nicht präzise Antwort. Aber das kann ich mir jetzt nicht verkneifen.
Was könntest du vergessen haben, wenn dein Programm das Modul
>>> simplemail <<< nicht finden kann?
mfg
Gerold

Verfasst: Dienstag 19. Januar 2010, 00:30
von obelisk.asterisk
z.B import simplemail
Ein import habe ich schon probiert.
Es funktioniert nicht.
mfg,
obelisk.asterisk
Verfasst: Dienstag 19. Januar 2010, 01:01
von jbs
Er sagt, dass es simplemail nicht gibt. Er kann es also nicht finden, was heisst, dass du das herunterladen und in den gleichen Ordner wie dein aktuelles File legen musst.
Download:
http://gelb.bcom.at/trac/simplemail/bro ... format=raw
Ich denke ein Einblick in
Module wäre nicht verkehrt.
Re: mail
Verfasst: Dienstag 19. Januar 2010, 12:32
von Masaru
gerold hat geschrieben:...
Entschuldige bitte meine nicht präzise Antwort. Aber das kann ich mir jetzt nicht verkneifen.

...

Du hast ja doch ein Quentchen
Sarkasmus in Dir gerold ... der Tag wird rot im Kalender markiert *g*
Re: mail
Verfasst: Dienstag 19. Januar 2010, 22:59
von snafu
gerold hat geschrieben:Entschuldige bitte meine nicht präzise Antwort.
Och, schade. Also mich hätte die Antwort schon interessiert...

[GELÖST]
Verfasst: Mittwoch 20. Januar 2010, 10:39
von obelisk.asterisk
Hallo,
endlich läuft das Skript. Durch das Downloaden der Datei in den Ordner
des Skriptes wurde das Problem [GELÖST].
SUPER, DANKE an euch.
Code: Alles auswählen
#simplemail importieren
from simplemail import Email
mail = Email(
smtp_server = "server.com",
smtp_user = "NAME",
smtp_password = "XXXXXXXXXXXX"
)
# Ansender
mail.from_address = "ichich@ICHICH.de"
# Empfaenger
mail.recipients.add("du@du.de")
mail.recipients.add("dudu@dudu.com")
# Betreff
mail.subject = "BLABLABLA"
## Nachricht
mail.message = """Hallo, BLABLABLA"""
# Anhaenge
mail.attachments.add_filename("/hier/ist/der/anhang_.csv")
# Senden
if mail.send():
print "Nachricht gesendet"
else:
print "Die Nachricht wurde nicht versendet"
Eine Frage hab ich noch wie trenne ich die Daten in einer csv Datei.
Kann man das mit einem Semikolon trennen????????
Bedanke mich nochmal bei euch besonders bei Gerold DANKE
Gruß,
obelisk.asterisk

Re: [GELÖST]
Verfasst: Mittwoch 20. Januar 2010, 11:14
von Masaru
obelisk.asterisk hat geschrieben:... Eine Frage hab ich noch wie trenne ich die Daten in einer csv Datei.
Kann man das mit einem Semikolon trennen????????
...
CSV verwendet zwar eigentlich (wie der Name schon sagt und gemäß
RFC 4180) das "Komma" als Feld-Separator, aber die Verwendung von Semikolon ist durch aus bereits dank anderer Spezifikationen und Implementierungen (z.B. in Excel) bekannt.
Um CSV-Dateien zu Lesen kannst Du den mitgelieferten [mod]csv#csv.reader[/mod] und zum Schreiben den äquivalenten [mod]csv#csv.writer[/mod] von Python verwenden.
>>Masaru<<
Modul csv
Verfasst: Mittwoch 20. Januar 2010, 14:12
von obelisk.asterisk
Hallo ich benutze gerade das Modul csv.
Das Skript läuft soweit mit dem Modul csv.
AAAAAAAber ein Problem hab ich noch.
Wenn ich das Skript gesendet habe und es mit exel öffne ist nichts in der Datei.
Woran kann das liegen?????????
Bedanke mich im vorraus
Gruß, obelisk.asterisk
Verfasst: Mittwoch 20. Januar 2010, 16:21
von Masaru
Da meine Zauberkugel gerade in der Reinigung ist ... zeig doch bitte ein wenig SourceCode, ja? In Deinen letzten src-posts war nämlich CSV nicht mehr enthalten.
Danke
>>Masaru<<
Verfasst: Donnerstag 21. Januar 2010, 08:39
von obelisk.asterisk
Hallo,
ich möchte mit simplemail die csv Datei versenden es funktioniert soweit.
Wenn ich die Email abrufe ist nichts in der Datei.
wenn ich simplemail in ein eigenes Skript schreibe funktionierts.
Hier ist mein Skript.
Bedanke mich im vorraus.
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: iso-8859-1 -*-
# Import librarys (Importierte Librarys von Python)
import MySQLdb
import sys
import os
import time
import datetime
import smtplib
import email
import simplemail
import csv
from simplemail import Email
# Derzeitiges Datum (Derzeitiges Datum wird deklariert)
currdate = datetime.datetime.now().strftime("%d%m%Y")
# oeffnen der csv Datei
datei=csv.writer(open('/Pfad/zur/Datei.csv', 'wb'))
#Datenbank-Connection -Cursor (Zeiger) erstellen
connect = MySQLdb.connect(host="xxxxxxxxxxx",db="xxxxxxxxxxx",user="xxxxxxxxxxxx",passwd="xxxxxxxxxxxxxxxxxx")
cursor = connect.cursor()
####
## Kopf
standort = 'Standort';
anrufe = 'Anrufe';
anzahl = 'Anzahl der Gespraeche';
dauer = 'Dauer der Gespraeche';
datei.writerow([standort, anrufe, anzahl, dauer])
################################################################################
text1 = 'SO'
text2 = 'Tele'
cursor.execute("""SELECT COUNT(uniqueid) FROM fpdd WHERE (llop LIKE '017%' OR dst LIKE '016%' OR dst LIKE '015%') AND (calldate >= CURRENT_DATE - INTERVAL 10 DAY)""")
dat = cursor.fetchall()
for row in dat:
# datei.write(str(row[0]) + "\t")
text3 = (str(row))
# Handy Gespraeche in min (Select abfrage und Summe bilden von der Datenbank cdr
cursor.execute("""SELECT SUM(billsec) FROM fppp WHERE (swkql LIKE '017%' OR dst LIKE '016%' OR dst LIKE '015%') AND (calldate >= CURRENT_DATE - INTERVAL 10 DAY) AND (disposition='ANSWERED')""")
dat = cursor.fetchone()
sec=dat[0] #Variable sec Werte der Datenbank in Array gespeichert
t = time.localtime(sec)
endcalls = time.strftime("%H:%M:%S",t)
# datei.write(str(endcalls) + "\n\n")
text4 = (str(endcalls))
# Daten in die csv Datei speichern
datei.writerow([text1, text2, text3, text4])
connect.close()
################################################################################
############ csv Datei per E-Mail versenden
######
###
mail = Email(
smtp_server = "server@dddddddddd",
smtp_user = "xxxxxxxxxxxxxxxx",
smtp_password = "xxxxxxxxxxxxxxx"
)
# Ansender
mail.from_address = "irgendeiner@xxxxxxxxx"
# Empfaenger
mail.recipients.add("xxxxxxxxxxx@irgendeiner")
# Betreff
mail.subject = "BETREFFBETREFF"
## Nachricht
mail.message = """Hallo """
# Anhaenge
mail.attachments.add_filename("/Pfad/zum/Skript.csv")
# Senden
if mail.send():
print "Nachricht gesendet"
else:
print "Die Nachricht wurde nicht versendet"
:K
Gruß,
obelisk.asterisk
Verfasst: Donnerstag 21. Januar 2010, 19:10
von gerold
Hallo obelisk.asterisk!
Du musst die Date schließen, bevor du sie versenden kannst. Erst beim Schließen der Datei werden die Daten in die Datei geschrieben.
Dass du evt. nach dem Ausführen des Programmes eine schön gefüllte Datei hast, liegt daran, dass beim Beenden des Programmes die Datei auch geschlossen wird.
mfg
Gerold
PS: Ein Auszug aus deinem Programm -- so könnte es vielleicht etwas übersichtlicher aussehen:
Code: Alles auswählen
sql = """
SELECT
SUM(billsec)
FROM
ast_cdr_ka
WHERE
(src LIKE '0%') AND
(calldate >= CURRENT_DATE - INTERVAL 10 DAY) AND
(disposition='ANSWERED')
"""
cursor.execute(sql)
PS2: Das heißt, dass du ein eigenes File-Objekt erstellen musst, welches du schließen kannst. ``open`` NICHT als Parameter verwenden.
.
Hallo
Verfasst: Freitag 5. Februar 2010, 12:17
von obelisk.asterisk
Hallo, Gerold
danke für deine Hilfe.
Das Skript läuft soweit.
Bedanke mich nochmal bei euch.