2011-10-09 20 views
5

Estoy enviando correo desde mi aplicación Java a la cuenta de Gmail. Había usado la API de Java Mail y funcionó bien. ¿Pero es posible enviar un correo electrónico sin usar la API de correo en java?enviar correo a la cuenta de Gmail

me refiero sólo mediante el uso de enchufes:

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; 
    } 
    } 
} 

Pero no está funcionando, no envía el correo. ¿Alguien puede decirme cuál podría ser el problema?

+1

intenta cerrar la toma al final, tuve un error con esto hace algún tiempo. – Sibbo

+0

¿Cuál es el error? – Mob

+0

No muestra ningún error pero el correo no está trsnsferred – Sharpzain120

Respuesta

2

Aquí es un buen ejemplo:

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

¿cuál es la lógica de la variable msgfile? – Sharpzain120

+0

Se encuentra el mensaje que se enviará. – MasterCassim

+0

530 5.7.0 Primero debe emitir un comando STARTTLS. ei16sm26532474wbb.21 – Sharpzain120

0

Si usted tiene una dirección IP dinámica es probable que no pueda enviar mensajes a Googlemail.

0

GMail no permite la transferencia de correo no segura. Necesita hacer una conexión SSL/TLS en su implementación.

0

De forma predeterminada, Google solo permite conexiones encriptadas. Eso es realmente algo bueno, en mi opinión.

Pero si debe enviar sus correos en texto plano, puede habilitarlo en su Account Page en la configuración.

0

Para utilizar una conexión segura, utilice SSLSocket en lugar de zócalo, así:

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