Posto il codice: sostanzialmente è quello indicato nel primo link di Andrea1979, ma l'ho leggermente modificato in modo che sia possibile inviare un file qualsiasi, tramite una sola chiamata:
codice:
import java.io.*;
import java.net.*;
public class SendMail {
static int SMTPport = 25;
static Socket socket;
static DataInputStream in;
static DataOutputStream out;
static PrintStream prout;
public static void sendMail(String mailServer,
String recipient,
String subject,
String messaggio,
String fileName,
String userName,
String from) {
try {
Socket s = new Socket(mailServer, SMTPport);
BufferedReader in = new BufferedReader( new InputStreamReader(s.getInputStream(), "8859_1") );
BufferedWriter out = new BufferedWriter( new OutputStreamWriter(s.getOutputStream(), "8859_1") );
String boundary = "Dat_Sep_Str_#COD#"; // Servirà?? -- Data Separator String --
sendln(in, out, "EHLO " + userName);
sendln(in, out, "MAIL FROM: <"+ from + ">");
sendln(in, out, "RCPT TO: <" + recipient + ">" );
sendln(in, out, "DATA");
sendln(out, "MIME-Version: 1.0");
sendln(out, "Subject: " + subject);
sendln(out, "From: " + userName + " <" + from + ">");
sendln(out, "Content-Type: multipart/mixed; boundary=\"" + boundary +"\"");
sendln(out, "\r\n--" + boundary);
// Send the body
sendln(out, "Content-Type: text/plain; charset=\"us-ascii\"\r\n");
sendln(out, messaggio);
sendln(out, "\r\n--" + boundary );
// send the attachment
String nomeFile = (new File(fileName)).getName();
sendln(out, "Content-Type:image/gif; name="+nomeFile);
sendln(out, "Content-Disposition: attachment;filename=\""+fileName+"\"");
sendln(out, "Content-transfer-encoding: base64\r\n");
MIMEBase64.encode(fileName, out);
sendln(out, "\r\n--" + boundary);
sendln(out, "\r\n\r\n--" + boundary + "--\r\n");
sendln(in, out,".");
sendln(in, out, "QUIT");
s.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void sendln(BufferedReader in, BufferedWriter out, String s) {
try {
out.write(s + "\r\n");
out.flush();
Thread.sleep(1000);
s = in.readLine();
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void sendln(BufferedWriter out, String s) {
try {
out.write(s + "\r\n");
out.flush();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
La classe richiede l'utilizzo anche della classe di corredo MIMEBase64.java che si trova sempre nel primo link.
Esempio di utilizzo:
codice:
SendMail.sendMail(hostName, // Indirizzo del server SMTP
indirizzoDestinatario, // Indirizzo del destinatario
oggetto, // campo Oggetto della mail
messaggio, // Messaggio testuale della mail
nomeFile, // Nome del file da allegare
nomeUtente, // Nome che verrà visualizzato dal destinatario
indirizzoMittente // Indirizzo del mittente
);
Tutti i parametri del metodo sendMail sono delle stringhe.
Ciao.