Newsgroup: it.comp.java
Titolo: Problema con invio mail con javax.mail

Ciao a tutti, sono nuovo di questo NG ma vrei bisogno di un
aiuto....ho un problema con la mia classe per l'invio delle email.....
In pratica non riesco a gestire bene il settaggio dei vari header per
impostare il charset , il content type, il Content-Transfer-Encoding
etc....
Il mio codice è questo
			MimeMessage message = new MimeMessage(session);
			message.setHeader("Content-Type", "text/plain");
			message.addHeader("Content-Type", "charset=ISO-8859-8");
			message.setFrom(new InternetAddress(from));
			java.util.StringTokenizer tokenizer = new
java.util.StringTokenizer(to,";");
			while (tokenizer.hasMoreTokens()){
				message.addRecipient(
Message.RecipientType.TO
,new
InternetAddress(tokenizer.nextToken()));
			}
			message.setSubject(subject);
			if(copy != null){
				java.util.StringTokenizer copyTokenizer = new
java.util.StringTokenizer(copy,";");
				while (copyTokenizer.hasMoreTokens()){
					message.addRecipient(
Message.RecipientType.CC
,new
InternetAddress(copyTokenizer.nextToken()));
				}
			}
			// Create the multi-part
			Multipart multipart = new MimeMultipart();
			BodyPart messageBodyPart = new MimeBodyPart();
			message.setHeader("Content-Type", "text/plain");
			message.addHeader("Content-Type", "charset=ISO-8859-8");
			messageBodyPart.setText(body);
			multipart.addBodyPart(messageBodyPart);
			DataSource dataSource;
			int index = 0;
			if(attaches != null){
				for(int i = 0; i < attaches.size(); i++){
					messageBodyPart = new MimeBodyPart();
					/*messageBodyPart.setHeader("Content-type", "application/
binary");
					messageBodyPart.addHeader("Content-Type", "charset=ISO-8859-8");
					messageBodyPart.addHeader("Content-Transfer-Encoding", "8bit");*/
					String attach = attaches.get(index).toString();
					String attachName = new String();
					if(asAttach != null)
						attachName = asAttach.get(index).toString();
					else
						attachName = new java.io.File(attachName).getName();
					dataSource = new FileDataSource(attach);
					messageBodyPart.setDataHandler(new DataHandler(dataSource));
					messageBodyPart.setFileName(attachName);
					// Add parts
					multipart.addBodyPart(messageBodyPart);
					++index;
				}
			}
			// Put parts in message
			message.setContent(multipart);
			message.setHeader("Content-Type", "text/plain;
charset=ISO-8859-8");
			//message.addHeader("Content-Type", "charset=ISO-8859-8");
			message.addHeader("Content-Transfer-Encoding", "8bit");
			/**Transport.send(message);*/
			Transport transport = session.getTransport("smtp");
			transport.send(message);
			transport.close();
Ho lasciato commentati i setHeader dentro la gestione degli
attachmenta....
Il mio dubbio è questo....devo settare l'header per il MimeBodyPart
contenente gli attachments o non cè nè bisogno? perchè se tolgo i
commenti nella parte degli attachments mi si incasina tutto...mentre
se lascio commentato mi arrivano correttamente....però non col il
charset e soprattutto il "Content-Transfer-Encoding", "8bit" che
vorrei io.....
Ma soprattutto...alla fine prima di inviare il messaggio setto
l'header con
message.setHeader("Content-Type", "text/plain; charset=ISO-8859-8");
il problema è che facendo cosi mi arriva una mail con dentro non solo
il body del messaggio ma con un sacco di cose scritte ma soprattutto
senza gli allegati!!!!
mi arriva una mail senza allegati con scritto cose del genere
------=_Part_0_26210109.1212050470990
Content-Type: text/plain; charset=ISO-8859-8
Content-Transfer-Encoding: quoted-printable
TEST INVIO MAIL
------=_Part_0_26210109.1212050470990
Content-Type: text/plain; charset=ISO-8859-8; name=debug1.txt
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=debug1.txt
Testo dentro l'allegato 1 DI TEST
------=_Part_0_26210109.1212050470990
Content-Type: text/plain; charset=us-ascii; name=Z.txt
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename=Z.txt
Testo dentro l'allegato 2 DI TEST
------=_Part_0_26210109.1212050470990--
Come mai?sicuramente mi sono incasinato con tutti sti settaggi di
header all'interno del codice...ma il mio problema è che devo settarlo
assolutamente visto che la mail dovrà arrivare con testo
israeliano...quindi è necessario che il subject e il body del
messaggio abbiano charset=ISO-8859-8
Grazie dell'aiuto.
Ciao

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
io ho fatto così
nome del file: file JGMail.java
import java.util.*;
public class JGMail
{
String d_email = "
avv...@gmail.com
",
d_password = "mizzeca",
d_host = "
smtp.gmail.com
",
d_port = "465",
 m_to = "
ci...@gmail.com
",
m_subject = "Avviso Automatico Prodotti Spediti Ieri";
public JGMail(String m_text)
{
Properties props = new Properties();
props.put("mail.smtp.user", d_email);
props.put("mail.smtp.host", d_host);
props.put("mail.smtp.port", d_port);
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.socketFactory.port", d_port);
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
SecurityManager security = System.getSecurityManager();
try
{
Authenticator auth = new SMTPAuthenticator();
Session session = Session.getInstance(props, auth);
MimeMessage msg = new MimeMessage(session);
msg.setSubject(m_subject);
msg.setFrom(new InternetAddress(d_email));
msg.addRecipient(
Message.RecipientType.TO
, new InternetAddress(m_to));
msg.setContent( m_text, "text/html" );
Transport.send(msg);
}
catch (Exception mex)
{
mex.printStackTrace();
}
}
private class SMTPAuthenticator extends javax.mail.Authenticator
{
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(d_email, d_password);
}
}
}

 m_subject = "Avviso Automatico Spediti da PANDINO di Ieri";
questi dati non sono quelli veri ? giusto ? XD
-- 
Davide Consonni


provali

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
io ho fatto così
nome del file: file JGMail.java
import java.util.*;
public class JGMail
{
String d_email = "
avv...@gmail.com
",
d_password = "mizzeca",
d_host = "
smtp.gmail.com
",
d_port = "465",


 ARGHHHH!!!!
Dai Manuel, si sa che sei L'anti StringTokenizer per eccellenza, ma se
per semplicità e velocità di stesura del codice giugy lo ha utilizzato
non mi sembra una tragedia!! :D
Ciao Marco

 
Io direi
public static String getFileExtension(String file)
  {
   int index=file.lastIndexOf('.');
   if(index==-1) return "";
   return (file.substring(index+1));
  }
Esistono anche i files senza estensione...