Mail mit Anhang versenden

Hallo liebe Experten,
zum Versenden von Mails verwende ich seit einiger Zeit eine Klasse Mailer. Sie funktioniert sehr gut.
Nun soll diese Klasse auch Anhänge versenden. Leider weigert sie sich hartnäckig.

Findet jemand das Problem?

public void run()
{
// EMail-versenden.
try
{
// Properties holen
java.util.Properties properties = System.getProperties();

// SMTP-Server festlegen
properties.put(„mail.smtp.host“, this.smtpProvider);

// Session anlegen
Session session = Session.getInstance(properties, null);

// Message anlegen
MimeMessage message = new MimeMessage(session);

// Absender setzen
message.setFrom(new InternetAddress(this.sender));

// Empfaenger (primary recipient) setzen
// Die Email-Adresse wird zusammengesetzt.
message.addRecipient(Message.RecipientType.TO,
new InternetAddress
(this.receiverFirst + „@“ + this.receiverLast));

// Betreff setzen
message.setSubject(this.mail_subject);

// Inhalt setzen
//message.setText(this.mail_text);

/** Ab hier beginnen die Änderungen. */
MimeMultipart content = new MimeMultipart( „alternative“ );
MimeBodyPart text = new MimeBodyPart();
MimeBodyPart file = new MimeBodyPart();

text.setText ( this.mail_text );
text.setHeader( „MIME-Version“ , „1.0“ );
text.setHeader( „Content-Type“ , text.getContentType() );

DataSource fileDataSource =
new FileDataSource( this.attachment );
file.setDataHandler( new DataHandler(fileDataSource) );

// gibt dem Anhang einen Namen
file.setFileName( „data.zip“ );

content.addBodyPart( text );
content.addBodyPart( file );

message.setContent( content );
/** Ende Änderungen. */

// Message senden
Transport.send(message);
System.out.println
("Mail an " + this.receiverFirst + „@“ + this.receiverLast

  • " wurde gesendet");
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    }

Danke
und tschüs
Uwe

.

Auch hallo.

Hallo liebe Experten,
zum Versenden von Mails verwende ich seit einiger Zeit :eine
Klasse Mailer. Sie funktioniert sehr gut.
Nun soll diese Klasse auch Anhänge versenden. Leider :weigert
sie sich hartnäckig.

…ist die Klasse ein Eigengebäck oder Bestandteil der ‚javamail‘-API ? Jedenfalls ist unter javablogs.com einiges zum Thema zu finden :smile:

Findet jemand das Problem?

Nicht auf die Schnelle :frowning:

mfg M.L.

Hallo Markus,

…ist die Klasse ein Eigengebäck oder Bestandteil der
‚javamail‘-API ?

Ein Eigengebäck und funktioniert bisher super.
Nur die Ergänzungen machen nicht das, was sie sollen.

Jedenfalls ist unter javablogs.com einiges
zum Thema zu finden :smile:

Leider ist dort alles in englisch. Bei so komplizierten Problemen schaffe ich das noch nicht. Deshalb frage ich bei w-w-w.

und tschüs
Uwe

Hallo nochmal.

Jedenfalls ist unter javablogs.com einiges
zum Thema zu finden :smile:

Leider ist dort alles in englisch. Bei so komplizierten
Problemen schaffe ich das noch nicht. Deshalb frage ich :bei w-w-w.

…und wie so häufig hilft ‚Java ist auch eine Insel‘ weiter: http://entwickler.com/itr/buchtipps/show.php3?nodeid… -> http://www.galileocomputing.de/openbook/javainsel5/j…
Sogar mit Anhang :smile:

HTH
mfg M.L.

Halllo Markus,

…und wie so häufig hilft ‚Java ist auch eine Insel‘ weiter:

Hilft sie leider nicht. Aus der Insel habe ich die Ergänzung für mein Programm abgeschrieben.

Allerdings wäre es hilfreich für mich, wenn du mir den Fehler nennst, den ich gemacht habe.
Hier ist der entsprechende Abschnitt:
http://www.galileocomputing.de/openbook/javainsel4/j…

Danke
und tschüs
Uwe

.

Allerdings wäre es hilfreich für mich, wenn du mir den Fehler
nennst, den ich gemacht habe.
Hier ist der entsprechende Abschnitt:
http://www.galileocomputing.de/openbook/javainsel4/j…

Versuch es mal ohne ‚Mime‘ fuer den file-Teil, also nur BodyPart.

BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setDataHandler( new DataHandler(fileDataSource) );
messageBodyPart.setFileName( dateiname );
multipart.addBodyPart( messageBodyPart );

Quelle:

http://www.galileocomputing.de/openbook/javainsel4/j…

(siehe Anhaenge)

Gruss, Patrick

Hallo Patrick,

Versuch es mal ohne ‚Mime‘ fuer den file-Teil, also nur
BodyPart.

habe ich versucht, leider ohne Ergebnis.

Auch habe ich geprüft, ob der Anhang überhaupt gelesen werden kann:

File f = new File(this.attachment);
if (!f.canRead()) System.out.println(„Fehler“);

Der Anhang wird gelesen. Leider.

Danke
und tschüs
Uwe

.

Hallo

Der Anhang wird gelesen. Leider.

Na, ist doch super.

Bei mir funktioniert das Insel-Beispiel einwandfrei.
Vielleicht solltest du nochmal feststellen was genau
nicht funktioniert. Wird die e-mail gar nicht versendet
oder wird sie nur ohne Anhang versendet?

Gruss, Patrick

Hallo Patrick,

Der Anhang wird gelesen. Leider.

Na, ist doch super.

Eben nicht. Dann hätte ich einen Ansatz, wo ich suchen muss :open_mouth:(

Vielleicht solltest du nochmal feststellen was genau
nicht funktioniert.

Genau das ist mein Ziel. Leider sind mir die Ideen dazu ausgegangen.
Deshalb danke für die Hilfe.

Wird die e-mail gar nicht versendet
oder wird sie nur ohne Anhang versendet?

Die e-mail wird sauber verschickt mit Betreff und Text.
Leider fehlt der Anhang.

Zur vorherigen Variante habe ich nur die Zeile
message.setText(this.mail_text);
auskommentiert und das gekennzeichnete Teil eingefügt.
Mehr nicht.

Würde mich freuen, wenn dir noch etwas einfällt.

Danke
und tschüs
Uwe

Hallo Patrick,
soeben ist mir folgender Text in „der Insel“ aufgefallen:

Der Konstruktor eines MimeMultipart-Objekts gibt der mehrtyp-Nachricht einen Namen. Ist dieser mit dem String »alternative«, so heißt das für den Mail-Client, dass es verschiedene Versionen desselben Textes enthält.

Vielleicht ist es falsch „alternative“ an den Konstruktor zu übergeben.
Tatsächlich möchte ich als Anlage eine Datei versenden.
Wenn das so ist, was übergebe ich dann an den Konstruktor?

Danke für die Mühe
und tschüs
Uwe

Hallo Patrick,
jetzt habe ich noch die Header ergänzt.
Der Effekt: Das Programm verschickt den Anhang, was schon sehr gut ist und ignoriert den Text. Vorher war es umgekehrt.
Was nun?

Hier ist die aktuelle Version:

public void run()
{
// EMail-versenden.
try
{
// Properties holen
java.util.Properties properties = System.getProperties();

// SMTP-Server festlegen
properties.put(„mail.smtp.host“, this.smtpProvider);

// Session anlegen
Session session = Session.getInstance(properties, null);

// Message anlegen
MimeMessage message = new MimeMessage(session);

// Absender setzen
message.setFrom(new InternetAddress(this.sender));

// Empfaenger (primary recipient) setzen
// Die Email-Adresse wird zusammengesetzt.
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(this.receiverFirst + „@“ + this.receiverLast));

// Betreff setzen
message.setSubject(this.mail_subject);

// Inhalt setzen
//message.setText(this.mail_text);

MimeMultipart content = new MimeMultipart( „alternative“ );
MimeBodyPart text = new MimeBodyPart();
MimeBodyPart file = new MimeBodyPart();

text.setText ( this.mail_text );
text.setHeader( „MIME-Version“ , „1.0“ );
text.setHeader( „Content-Type“ , text.getContentType() );

File f = new File(this.attachment);
if (f.canRead())
System.out.println(„Kann " + this.attachment + " Lesen.“);

DataSource fileDataSource = new FileDataSource( this.attachment );
file.setDataHandler( new DataHandler(fileDataSource) );
file.setFileName( „data.zip“ ); // gibt dem Anhang einen Namen

file.setHeader( „MIME-Version“ , „1.0“ );
file.setHeader( „Content-Type“ , file.getContentType() );

content.addBodyPart( text );
content.addBodyPart( file );

message.setContent( content );
message.setHeader( „MIME-Version“ , „1.0“ );
message.setHeader( „Content-Type“ , content.getContentType() );

// Message senden
Transport.send(message);
System.out.println
(„Mail an " + this.receiverFirst + „@“ + this.receiverLast + " wurde gesendet“);
}
catch(Exception e)
{
e.printStackTrace();
}
}

Vielleicht kommen wir jetzt voran
und tschüs
Uwe

Vielleicht ist es falsch „alternative“ an den Konstruktor zu
übergeben.

ja, das ist es. „mixed“ lautet das Zauberwort.

MimeMultipart content = new MimeMultipart("mixed");

Gruss, Patrick

3 „Gefällt mir“

ja, das ist es. „mixed“ lautet das Zauberwort.

… und dafür gibt es ein Sternchen, lieber Patrick.
Danke sehr.

Die e-mail wird verschickt, so wie es sein soll :open_mouth:)

Frohe Ostern wünscht dir
Uwe
http://www.haller-mtl.de

.