webForumDet fria alternativet

JavaMail sessions

1 svar · 252 visningar · startad av Viktor

ViktorMedlem sedan aug. 20021 752 inlägg
#1

Hej!

Varje gång en användare rörsig mellan olika mappar (IMAP mail mappar) i min webmail så anroppars först openConnection och sedan closeConnection när den är klar med mappen (delfråga, eller ska man köra med öppen hela tiden??)

public Store openConnection()
throws NoSuchProviderException, MessagingException 
{
	Properties props=new Properties();
	Session session=Session.getDefaultInstance(props,null);
	Store store=session.getStore(getPostOffice("protocol"));
	store.connect(getPostOffice("host"),Integer.parseInt(getPostOffice("port")),username,password);
	return(store);
}

public void closeConnection(Store store)
throws MessagingException
{
	if((store!=null)&&(store.isConnected()))
		store.close();
}

det fungerar perfekt, jag kan vandra runt hur mycket jag vill utan problem. När jag nu ska skicka ett mail så har jag skrivit såhär

try
{
	Properties props = System.getProperties();
	props.put("mail.smtp.host", "mail.xxxxx.com");
	Session session = Session.getDefaultInstance(props, null);
	MimeMessage message = new MimeMessage(session);
	message.setFrom(new InternetAddress("viktor@xxxxx.com"));
	message.addRecipient(Message.RecipientType.TO,new InternetAddress("viktor@xxxxx.com"));
	message.setSubject("Hello 2222!");
	message.setText("Hello Viktor 2");
	Transport.send(message);
}
catch(AddressException e)
{
	e.printStackTrace(System.err);
}
catch(MessagingException e)
{
	e.printStackTrace(System.err);
}

(test kod bara)
om jag kör sänd koden ensam så fungerar den perfekt, men om jag kör den EFTER att jag har varit inne i en mapp (kört den första koden) så får jag detta felmedelande

javax.mail.SendFailedException: Sending failed;
nested exception is:
javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
javax.mail.SendFailedException: 550 5.7.1 Unable to relay for viktor@xxxxxx.com

Men om jag byter raden

Session session = Session.getDefaultInstance(props, null);

mot

Session session = Session.getInstance(props, null);

så fungerar det perfekt igen, någon som kan berätta varför det inte går att använda det gammla session objektet när jag ska skicka men det går att använda det flera gånger när jag ska kolla i mapparna.

/Viktor

rasmusanderssonMedlem sedan nov. 20031 inlägg
#2

Om du kör Tomcat så kan du lägga in en fast mail-session i en kontext. Kör du Tomcat 5, kan du lägga nedan kod i "<TOMCAT>/conf/Catalina/localhost/<DINWEBAPP>.xml".

<Resource name="mail/Session" type="javax.mail.Session"/>
<ResourceParams name="mail/Session">
	<parameter>
		<name>mail.smtp.host</name>
		<value>din.internetleverantor.se</value>
	</parameter>
</ResourceParams>

Sedan skapar/länkar man sessionen typ såhär:

Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
Session session = (Session) envCtx.lookup("mail/Session");
136 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)