Seite 1 von 1

Welches dieser Module will einen X-Server?!?!

Verfasst: Donnerstag 9. Januar 2003, 19:17
von piddon

Code: Alles auswählen

import rfc822, string, sys, base64, os, os.path, mimetypes
import smtplib, MimeWriter, StringIO
Irgenteins davon braucht ein laufenden X-Server unter linux! Aber auf meinem Onlineserver ist das nicht!

*nixraff* Wer ist schuld?

Verfasst: Donnerstag 9. Januar 2003, 20:06
von hans
Wie kommst du darauf? Gibt's irgendeine Fehlermeldung? Ich bin auf meinem Linuxserver mit <Strg> + <Alt> + <F2> mal auf eine Konsole gegangen. Es ließ sich aber alles importieren. Keine Fehlermeldung.

Oder hätte ich das im Runlevel 3 auf meiner SuSE 8.1 Maschine prüfen müssen?

Hans

Verfasst: Donnerstag 9. Januar 2003, 20:46
von piddon
Die fehlermeldung lautet: Can't connect to X-Server

Muss ein Modul sein, denn die Meldung kommt bei dem import. Auf dem Onlineserver ist nichts in Sachen x installiert. Evtl. findet er bei dir alles was er braucht. Ich jedenfalls finde es bissl blöd, denn die Module sind für ein Mailscript, und ich brauche wohl alle. Aber mal sehen, evtl kann man ja das eine, das tört weglassen und alles anders lösen.

Verfasst: Donnerstag 9. Januar 2003, 20:57
von Milan
ich habe zwar wirklich null ahnung welches einen X-Server brauchen kann, weil ich kein Linux habe, aber teste doch einfach alle Module einzeln ohne andere Programmteile durch... zu dem Rest kann ich wie gesagt nichts sagen :wink: :lol:

Verfasst: Donnerstag 9. Januar 2003, 21:18
von piddon
Ja da flipp ich aus. Keines der importierten will ein X-Server. Jetzt muss ich mal weitere Quellen ansuchen...

Wer Lust hat hier der Code:

Code: Alles auswählen

import rfc822, string, sys, base64, os, os.path, mimetypes
import smtplib, MimeWriter, StringIO

class faktMimeMail:

    def __init__(self, host="localhost"):
        self.body       = "This is a multi-part message in MIME Format"
        self.text       = "This is a multi-part message in MIME Format"
        self.htmlbody   = ""
        self.to         = []
        self.frm        = ""
        self.rplto      = ""
        self.subject    = "No subject"
        self.parts      = []
        self.host = host

    def AddPart(self, type, data, name="untitled"):
        self.parts.append((type,data,name))

    def BodyHTML(self, html):
        self.htmlbody = html

    def AddFile(self, filename):
        name = os.path.basename(filename)
        t = mimetypes.guess_type(name)[0]
        self.AddPart(t, open(filename,"rb").read(),name)

    def Body(self, s):
        self.body       = s

    def To(self, s):
        if type(s) == type([]):
            self.to         = s
        else:
            self.to         = [s]

    def From(self, s):
        self.frm        = s

    def ReplyTo(self, s):
        self.rplto = s

    def Subject(self, s):
        self.subject    = s

    def Get(self, index=-1):
        if index>=0:
            to = [self.to[index]]
        else:
            to = self.to
            
        if self.htmlbody or self.parts:

            self.out        = StringIO.StringIO("")
            self.mail       = MimeWriter.MimeWriter(self.out)

            if not self.rplto: self.rplto = self.frm

            self.mail.addheader("To",       string.join(to, ", "))
            if self.rplto:
                self.mail.addheader("Reply-to",       self.rplto)          
            self.mail.addheader("From",     self.frm)
            self.mail.addheader("Subject",  self.subject)
            self.mail.addheader("MIME-Version",     "1.0")

            self.bodyout    = self.mail.startmultipartbody("mixed")
            
            if self.body:
                self.text = self.body
                
            self.bodyout.write(self.text+"\n\n")

            if self.htmlbody:
                part = self.mail.nextpart()
                part.addheader("Content-Transfer-Encoding","8bit")
                out  = part.startbody("text/html", [("charset","iso-8859-1"),("format","flowed")])
                out.write(self.htmlbody+"\n")

            for t, d, name in self.parts:
                part = self.mail.nextpart()
                part.addheader("Content-Transfer-Encoding","base64")
                part.addheader("Content-Disposition","inline")
                out  = part.startbody(t, [("name",name)])#
                        #("Content-Transfer-Encoding","8bit")
                        #s])

                out.write(base64.encodestring(d))
                
            self.mail.lastpart()

            text = self.out.getvalue()
            self.out.close()

        else:
            rplto = ""
            if self.rplto: rplto = "Reply-To: %s\n" % self.rplto
            text = """To: %s
From: %s
Subject: %s
%sContent-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit

""" % (string.join(to, ", "), self.frm, self.subject, rplto) + self.body

        return text

    def Send(self, host="", single=1):
        if not host: host = self.host
        server = smtplib.SMTP(host)
        if single:
            for i in range(0,len(self.to)):
                server.sendmail(self.frm, self.to[i], self.Get(i))
        else:            
            server.sendmail(self.frm, self.to, self.Get())
        server.quit()
        return 1
        #else:
        #       return 0



def sendmail(host="localhost", sender="Python Mail Module <python.mail.module@localhost>", to="", body="", subject=""):
    """
    Einfache Routine um E-Mails zu verschicken
    """
    try:
        server = smtplib.SMTP(host)
        if subject:
            body = "Subject: " + subject + "\n\n" + body
        server.sendmail(sender, [to], body)
        server.quit()
    except:
        print "Error while sending message"

def errormail(to="error@localhost", subject="Python Error Message"):
    try:
        """
        Versendet eine E-Mail, die den letzten Traceback und
        die Umgebungsvariablen enthaelt
        """
        type=None
        value=None
        tb=None
        limit=None

        if type is None:
            type, value, tb = sys.exc_info()
        import traceback

        body = "Traceback (innermost last):\n"
        list = traceback.format_tb(tb, limit) + \
               traceback.format_exception_only(type, value)
        body = body + "%s %s" % (
            string.join(list[:-1], ""),
            list[-1],
            )

        import os
        e = os.environ
        se = e.keys()
        se.sort()

        body = body + "\n\nENVIRONMENT VARIABLES\n\n"

        for k in se:
            body = body + "%26s  %s\n" % (k, str(e[k]   ))

        sendmail(to=to, body=body, subject=subject)

        del tb
    except:
        pass

if __name__=="__main__":
    if len(sys.argv) < 6:
        print "Usage: csmailer.py <SMTPSERVER> <FROM> <TO> <SUBJECT> <BODY> <FILEWITHPATH>"
        sys.exit(0)
        
    mail = faktMimeMail()
    mail.To([sys.argv[2]])
    mail.From(sys.argv[1])
    mail.Subject(sys.argv[3])
    mail.Body(sys.argv[4])
    mail.AddFile(sys.argv[5])
    mail.AddPart("application/pdf", open(sys.argv[5]).read())
    mail.Send(sys.argv[0])
Die Klasse, die da benutzt wird ist nicht von mir, nur der aufruf mittels übergaben. Soviel zum rechtlichen ;)

Verfasst: Donnerstag 9. Januar 2003, 21:44
von hans
pychecker sagt erstmal folgendes:

Code: Alles auswählen

hans@poorbill:~/tmp> pychecker testxx.py
Processing testxx...

Warnings...

testxx.py:2: Imported module (rfc822) not used
testxx.py:159: Module (os) re-imported
hans@poorbill:~/tmp>
Ich kann auf Anhieb so auch nichts endecken.
Milan hat geschrieben:teste doch einfach alle Module einzeln ohne andere Programmteile durch..
Habe ich doch gemacht, und zwar nicht aus einem XServer hearus. Es ließ sich alles importieren.

Was macht folgende Zeile?

Code: Alles auswählen

mail.AddPart("application/pdf", open(sys.argv[5]).read())


Hans

Verfasst: Donnerstag 9. Januar 2003, 22:14
von piddon
Was macht folgende Zeile?

Code: Alles auswählen

mail.AddPart("application/pdf", open(sys.argv[5]).read()) 
Diese Zeile fügt der Mail einen weiteren Part zu, in dem Fall ein anhang, mit dem Mimetype für PDF, und den dazugehörigen PFAD+File, des anzuhängenden Files.

:)

Verfasst: Donnerstag 9. Januar 2003, 22:22
von Voges
an piddon:

Hast Du denn mal geguckt, wo die Fehlermeldung erfolgt? Kannst ja mal zum Debuggen ein paar print-Anweisungen einstreuen.
Jan