ccList

Status
Nicht offen für weitere Antworten.

djterm

Mitglied
hallo zusammen!

hab da mal ne frage ;)

und zwar soll eine ccList verschickt werden. dazu hab ich ne klasse MailCreator. sie erhält von einer main-class die ccList als Collection sowie subject und message. dann "baut" sie die mail zusammen und gibt die dann an main zurück von main aus wird sie an eine klasse MailSender übergeben, der sie dann abschicken soll. hier mal der code
Code:
import java.util.Collection;

import org.apache.commons.mail.SimpleEmail;


public class MailCreator {
	
	public SimpleEmail buildMail( Collection ccList, String subject, String message) throws Exception{
		
		SimpleEmail email=new SimpleEmail();
		
		email.setHostName(MailSettings.smtpHost);
		email.setAuthentication(MailSettings.smtpUsername, MailSettings.smtpPassword);
		email.setFrom(MailSettings.fromAddress,MailSettings.fromName);
		
		email.setCc(ccList);
		
		email.setSubject(subject);
	
		email.setMsg(message);	
		
		return email;
		
				
	}

}
problem ist folgendes: ich bekommen eine java.lang.ArrayStoreException und kann mir die nicht erklären.

vlt weiß ja hier jemand zu helfen ?
 

Campino

Top Contributor
a) Du verschickst keine ccList, weil es keine Klasse ccList gibt. Du verschickst eine Collection. Die heißt zwar ccList, aber sie könnte auch Harry heißen, dass wäre dem Programm egal. Wenn du schreibst, dass du eine ccList verschickst, wissen wir erst auf den zweiten Blick, was du meinst. Deshalb würdest du vermutlich schneller eine Antwort erhalten, wenn du sofort von einer Collection sprichst.

b) Du verwendest die org.apache.commons.mail-Bibliotheke. Das solltest du zumindest hinschreiben. Ich wusste zwar zufällig, dass SimpleEmail keine Standardklasse ist sondern aus dem jakarta-Projekt stammt und konnte die javadocs so finden, aber das müssen nicht unbedingt alle wissen. Wieder: Du erhälst schneller Antwort, wenn du einfach angibst, mit welchen nativen Bibliotheken du arbeitest.

c) Ich sehe das doch richtig, dass du die Collection verschicken willst, damit der Empfänger sehen kann, was in der Collection ist, oder? Die Methode setCc dint nämlich dazu, eine Liste von Empfängern an die die E-Mail geschickt werden soll zu übergeben, die wird nicht unbedingt beim Empfänger ankommen und es wird in jedem Fall Fehler geben, falls deine Collection keine E-Mail-Adressen enthält.

d)Eine ArrayStoreException tritt auf, wenn ein Array mit Objekten gefüllt wird, die nicht seinem Typ entsprechen. (Siehe die API http://java.sun.com/j2se/1.5.0/docs/api/java/lang/ArrayStoreException.html).
Ich tippe darauf, dass setCc eine Collection mit E-Mail-Adressen, die als Strings gespeichert sind, erwartet. Dadurch das du keine Strings in deiner Collection hast, tritt dann die Exception auf. Informationen dazu, was für Objekte deine Collection enthält (der Klassenname, nicht der Variablenname ;) ) wären wünschenswert.

so,
campino
 
G

Gast

Gast
danke dir für die antwort. ich hätte natürlich die angesprochenen formalia einhalten sollen, sorry!

ich habe die collection zuvor mit strings gefüllt, die email addis enthalten. ich kann ja morgen mal den rest des codes posten.

trotzdem jetzt schonmal vielen dank für deine hilfe!
 

djterm

Mitglied
hier das main:
Code:
package de.umkuk.mail;

import java.util.ArrayList;
import java.util.Collection;

import org.apache.commons.mail.SimpleEmail;


public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		
		MailCreator mail = new MailCreator();
		
		//Empfängerliste festlegen
		Collection<String> ccList = new ArrayList<String>();
		ccList.add("*********@*****.**");
		ccList.add("*********@*****.**");
		ccList.add("*********@*****.**);
		
		//Betreff und Nachricht setzen
		String subject="Test";
		String message="This is a test ! ! !";
		
		//Empfänger, Betreff und Nachricht an Klasse UmkukMail übergeben
		SimpleEmail email = mail.buildMail(ccList,subject,message);
		
		MailSender sender = new MailSender();
		
		sender.send(email);


	}

}

der mailsender:
Code:
package de.umkuk.mail;

import org.apache.commons.mail.SimpleEmail;


public class MailSender {
	
	public void send ( SimpleEmail email) throws Exception{		
		email.send();			
	}
}

und hier mail settings:
Code:
package de.umkuk.mail;

public class MailSettings {
	
	// Set smtpHost to the hostname for your mail server
	public static final String smtpHost="****.******.**";
		
	// For SMTP authentication, set the next lines to your username and password for the mail server
	public static String smtpUsername="*********";
	public static String smtpPassword="******";
	public static String fromAddress="******@*****.**";
	public static String fromName="**********";

}

das senden an sich funzt auf jedenfall, wenn ich nur eine mailaddi übergebe.
 

djterm

Mitglied
hab den fehler gefunden! folgende zeilen fehlten:

for(Iterator it = ccList.iterator();it.hasNext();) {
Object ob = it.next();
String tmp = (String) ob;
email.addCc(tmp);
}

email.setCc(ccList) ist zwar syntaktisch nicht falsch, jedoch muss jede addi EINZELN an email übergeben werden.
 

djterm

Mitglied
oder besser:

Code:
	for(Iterator it = ccList.iterator();it.hasNext();) {
		String tmp = (String)it.next();
		email.addCc(tmp);
	}
 

Campino

Top Contributor
ähm...hast du mal versucht die Collection an einen Typ zu binden?

Code:
public SimpleEmail buildMail( Collection<String> ccList, String subject, String message) throws Exception{

Wenn das nicht geht, würde ich den Programmierer der Library köpfen und vierteilen ;)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben