2011-10-09 16 views
5

Sto inviando posta dalla mia app Java all'account Gmail. Avevo utilizzato l'API Java Mail e funzionava perfettamente. Ma è possibile inviare una e-mail senza utilizzare l'API di posta in java?invia posta all'account Gmail

Voglio dire solo utilizzando i socket:

public class Main { 
    public static void main(String[] args) throws Exception { 
    String host = "smtp.gmail.com"; 
    int port = 465; 
    String from = "[email protected]"; 
    String toAddr = "[email protected]"; 


    Socket servSocket = new Socket(host, port); 
    DataOutputStream os = new DataOutputStream(servSocket.getOutputStream()); 
    DataInputStream is = new DataInputStream(servSocket.getInputStream()); 

    if (servSocket != null && os != null && is != null) { 
     os.writeBytes("HELO\r\n"); 
     os.writeBytes("MAIL From:" + from + " \r\n"); 
     os.writeBytes("RCPT To:" + toAddr + "\r\n"); 
     os.writeBytes("DATA\r\n"); 
     os.writeBytes("X-Mailer: Java\r\n"); 
     os.writeBytes("DATE: " + DateFormat.getDateInstance(DateFormat.FULL, 
            Locale.US).format(new Date()) + "\r\n"); 
     os.writeBytes("From:" + from + "\r\n"); 
     os.writeBytes("To:" + toAddr + "\r\n"); 
    } 

    os.writeBytes("Subject:\r\n"); 
    os.writeBytes("body\r\n"); 
    os.writeBytes("\r\n.\r\n"); 
    os.writeBytes("QUIT\r\n"); 
    String responseline; 
    while ((responseline = is.readUTF()) != null) { 
     if (responseline.indexOf("Ok") != -1) 
     break; 
    } 
    } 
} 

Ma non funziona, non invia la posta. Qualcuno può dirmi quale potrebbe essere il problema?

+1

tenta di chiudere la presa, alla fine, ho avuto un bug con questo po 'di tempo fa. – Sibbo

+0

Qual è l'errore? – Mob

+0

Non mostra alcun errore ma la posta non è trsnsferred – Sharpzain120

risposta

2

Ecco un buon esempio:

public class SMTPDemo { 

    public static void main(String args[]) throws IOException, 
     UnknownHostException { 
    String msgFile = "file.txt"; 
    String from = "[email protected]"; 
    String to = "[email protected]"; 
    String mailHost = "yourHost"; 
    SMTP mail = new SMTP(mailHost); 
    if (mail != null) { 
     if (mail.send(new FileReader(msgFile), from, to)) { 
     System.out.println("Mail sent."); 
     } else { 
     System.out.println("Connect to SMTP server failed!"); 
     } 
    } 
    System.out.println("Done."); 
    } 

    static class SMTP { 
    private final static int SMTP_PORT = 25; 

    InetAddress mailHost; 

    InetAddress localhost; 

    BufferedReader in; 

    PrintWriter out; 

    public SMTP(String host) throws UnknownHostException { 
     mailHost = InetAddress.getByName(host); 
     localhost = InetAddress.getLocalHost(); 
     System.out.println("mailhost = " + mailHost); 
     System.out.println("localhost= " + localhost); 
     System.out.println("SMTP constructor done\n"); 
    } 

    public boolean send(FileReader msgFileReader, String from, String to) 
     throws IOException { 
     Socket smtpPipe; 
     InputStream inn; 
     OutputStream outt; 
     BufferedReader msg; 
     msg = new BufferedReader(msgFileReader); 
     smtpPipe = new Socket(mailHost, SMTP_PORT); 
     if (smtpPipe == null) { 
     return false; 
     } 
     inn = smtpPipe.getInputStream(); 
     outt = smtpPipe.getOutputStream(); 
     in = new BufferedReader(new InputStreamReader(inn)); 
     out = new PrintWriter(new OutputStreamWriter(outt), true); 
     if (inn == null || outt == null) { 
     System.out.println("Failed to open streams to socket."); 
     return false; 
     } 
     String initialID = in.readLine(); 
     System.out.println(initialID); 
     System.out.println("HELO " + localhost.getHostName()); 
     out.println("HELO " + localhost.getHostName()); 
     String welcome = in.readLine(); 
     System.out.println(welcome); 
     System.out.println("MAIL From:<" + from + ">"); 
     out.println("MAIL From:<" + from + ">"); 
     String senderOK = in.readLine(); 
     System.out.println(senderOK); 
     System.out.println("RCPT TO:<" + to + ">"); 
     out.println("RCPT TO:<" + to + ">"); 
     String recipientOK = in.readLine(); 
     System.out.println(recipientOK); 
     System.out.println("DATA"); 
     out.println("DATA"); 
     String line; 
     while ((line = msg.readLine()) != null) { 
     out.println(line); 
     } 
     System.out.println("."); 
     out.println("."); 
     String acceptedOK = in.readLine(); 
     System.out.println(acceptedOK); 
     System.out.println("QUIT"); 
     out.println("QUIT"); 
     return true; 
    } 
    } 
} 

->http://www.java2s.com/Code/Java/Network-Protocol/SendingMailUsingSockets.htm

+0

qual è la logica della variabile msgfile? – Sharpzain120

+0

C'è il messaggio che verrà inviato. – MasterCassim

+0

530 5.7.0 È necessario prima emettere un comando STARTTLS. ei16sm26532474wbb.21 – Sharpzain120

0

Se avete un IP dinamico si sono probabilmente non è in grado di inviare messaggi a Googlemail.

0

GMail non consente il trasferimento di posta elettronica non sicuro. È necessario creare una connessione SSL/TLS nella propria implementazione.

0

Per impostazione predefinita, Google consente solo connessioni crittografate. Questa è davvero una buona cosa, secondo me.

Tuttavia, se è necessario inviare le proprie e-mail in testo in chiaro, è possibile abilitarlo sul proprio Account Page nelle impostazioni.

0

Per poter utilizzare una connessione sicura, utilizzare SSLSocket invece di Socket, in questo modo:

SSLSocket socket = (SSLSocket) ((SSLSocketFactory) SSLSocketFactory.getDefault()).createSocket(InetAddress.getByName("smtp.gmail.com"), 465); 
Problemi correlati