I would need some strange header to make the hotmail like my email????
My code is:
Expand|Select|Wrap|Line Numbers
- import java.net.*;
- import java.io.*;
- import java.util.*;
- import java.text.*;
- import javax.naming.*;
- import javax.naming.directory.*;
- public class SmtpSimple
- {
- private DataOutputStream os = null;
- private BufferedReader is = null;
- private String sRt = "";
- private final String CRLF = "\r\n";
- private final void writeRead( boolean bReadAnswer,
- String sAnswerMustStartWith,
- String sWrite )
- throws IOException, Exception
- {
- System.out.println("Mando->"+sWrite);
- if( null != sWrite && 0 < sWrite.length() )
- {
- sRt += sWrite;
- os.writeBytes( sWrite );
- }
- if( bReadAnswer )
- {
- String sRd = is.readLine() + "\n";
- System.out.println("Recibo->"+sRd);
- sRt += sRd;
- if( null != sAnswerMustStartWith
- && 0 < sAnswerMustStartWith.length()
- && !sRd.startsWith( sAnswerMustStartWith ) )
- throw new Exception( sRt );
- }
- }
- public synchronized final String sendEmail( String sSmtpServer,
- String sFromAdr, String sFromRealName,
- String sToAdr, String sToRealName,
- String sSubject, String sText )
- throws IOException, Exception
- {
- sRt = "";
- if( null == sSmtpServer || 0 >= sSmtpServer.length() ||
- null == sFromAdr || 0 >= sFromAdr.length() ||
- null == sToAdr || 0 >= sToAdr.length() ||
- ( (null == sSubject || 0 >= sSubject.length())
- && (null == sText || 0 >= sText.length()) ) )
- throw new Exception( "Invalid Parameters for SmtpSimple.sendEmail()." );
- if( null == sFromRealName || 0 >= sFromRealName.length() ) sFromRealName = sFromAdr;
- if( null == sToRealName || 0 >= sToRealName.length() ) sToRealName = sToAdr;
- Socket so = new Socket( sSmtpServer, 25 );
- os = new DataOutputStream( so.getOutputStream() );
- is = new BufferedReader(
- new InputStreamReader( so.getInputStream() ) );
- so.setSoTimeout( 10000 );
- writeRead( true, "220", null );
- writeRead( true, "250", "HELO " + sSmtpServer + CRLF );
- writeRead( true, "250", "MAIL FROM:<" + sFromAdr + "> "+ CRLF );
- writeRead( true, "250", "RCPT TO:<" + sToAdr + ">"+ CRLF );
- writeRead( true, "354", "DATA"+ CRLF );
- writeRead( false, null, "Return-Path: root@plexus.kodics.de\n" );//necesaria para hotmail
- writeRead( false, null, "Date: " + getDateString()+ "\n" );
- writeRead( false, null, "From: " + sFromRealName + " <" + sFromAdr + ">"+ "\n" );
- writeRead( false, null, "To: " + sToRealName + " <" + sToAdr + ">"+ "\n" );
- writeRead( false, null, "Subject: " + sSubject + "\n");
- writeRead( false, null, "Mime-Version: 1.0"+ "\n" );
- writeRead( false, null, "X-Mailer: PHP v5.1"+ "\n" );
- writeRead( false, null, "Content-Type: text/html; charset=iso-8859-1"+ "\n" );
- writeRead( false, null, "Message-ID: <"+(new java.util.Date()).getTime()+"@plexus.kodics.de>"+ "\n" );//necesaria para hotmail
- writeRead( false, null, "Content-Transfer-Encoding: 7bit"+ "\n" );
- writeRead( false, null, "\n");
- writeRead( false, null, "<html><body><table><tr><td>Mensaje de prueba</td></tr></table></body></html>");
- //writeRead( false, null, base64encode("<html><body><table><tr><td>Mensaje de prueba</td></tr></table></body></html>\n"));
- writeRead( true, "250", CRLF+"."+ CRLF );
- writeRead( true, "221", "QUIT"+ CRLF );
- is.close();
- os.close();
- so.close();
- is = null;
- os = null;
- return sRt;
- }
- public static void main( String[] args )
- {
- String sSmtpServer = "";
- String sFromAdr = "root@plexus.kodics.de";
- String sFromRealName = "root";
- String sToAdr1 = "jlconde15@hotmail.com";
- String sToAdr2 = "lillae25@yahoo.de";
- String sToAdr3 = "jlconde@globalia-sistemas.com";
- String sToRealName = "Jose";
- String sSubject = "subject text/html";
- String sText = "texto body";
- Iterator it;
- try
- {
- SmtpSimple smtp = new SmtpSimple();
- it = getServers(sToAdr1).iterator();
- while (it.hasNext())
- {
- try
- {
- sSmtpServer = (String) it.next();
- smtp.sendEmail( sSmtpServer, sFromAdr, sFromRealName, sToAdr1, sToRealName, sSubject, sText);
- break;
- }
- catch (Exception e)
- {
- System.out.println("Error con servidor "+sSmtpServer+" ->"+e);
- }
- }
- /*
- it = getServers(sToAdr2).iterator();
- while (it.hasNext())
- {
- try
- {
- sSmtpServer = (String) it.next();
- smtp.sendEmail( sSmtpServer, sFromAdr, sFromRealName, sToAdr2, sToRealName, sSubject, sText);
- break;
- }
- catch (Exception e)
- {
- System.out.println("Error con servidor "+sSmtpServer+" ->"+e);
- }
- }
- */
- /*
- it = getServers(sToAdr3).iterator();
- while (it.hasNext())
- {
- try
- {
- sSmtpServer = (String) it.next();
- smtp.sendEmail( sSmtpServer, sFromAdr, sFromRealName, sToAdr3, sToRealName, sSubject, sText);
- break;
- }
- catch (Exception e)
- {
- System.out.println("Error con servidor "+sSmtpServer+" ->"+e);
- }
- }
- */
- }
- catch( Exception ex )
- {
- System.out.println( "Error:\n" + ex );
- System.exit( 2 );
- }
- System.exit( 0 );
- }
- public static Vector getServers(String email) throws Exception{
- Vector mxserver=new Vector();
- String hostName;
- if (email.indexOf("@") == -1)
- {
- throw new Exception("Error E-mail address");
- }
- hostName = email.substring(email.indexOf("@")+1);
- String mailer=hostName,ip="";
- try{
- Hashtable env = new Hashtable();
- env.put("java.naming.factory.initial","com.sun.jndi.dns.DnsContextFactory");
- DirContext ictx = new InitialDirContext( env );
- Attributes attrs = ictx.getAttributes( hostName, new String[] { "MX" });
- Attribute attr1 = attrs.get( "MX" );
- Vector mxweight=new Vector();
- int weight=999,max=0;
- for (int i=0;i<attr1.size();i++){
- String mxrec=(String)attr1.get(i);
- Integer theweight=new Integer(mxrec.substring(0,mxrec.indexOf(" ")));
- String theserver=mxrec.substring(mxrec.indexOf(" ")+1);
- if (theserver.endsWith(".")) theserver=theserver.substring(0,theserver.length()-1);
- if (theweight.compareTo(weight)<0) {
- mxweight.add(0,theweight);
- mxserver.add(0,theserver);
- weight=theweight;
- } else {
- boolean filled=false;
- for (int j=0;j<mxweight.size();j++){
- if (((Integer)mxweight.elementAt(j)).compareTo(theweight)>0) {
- mxweight.add(j,theweight);
- mxserver.add(j,theserver);
- filled=true;
- break;
- }
- }
- if (!filled) {
- mxweight.add(mxweight.size(),theweight);
- mxserver.add(mxserver.size(),theserver);
- }
- }
- }
- }catch (Exception e) {
- throw new Exception(e.getMessage());
- }
- if (mxserver.size()==0) mxserver.add(hostName);
- return mxserver;
- }
- static String getDateString(){
- SimpleDateFormat formatter= new SimpleDateFormat ("EEE, dd MMM yyyy HH:mm:ss 'XXXXX'",Locale.US);
- formatter.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
- String str=formatter.format(new java.util.Date().getTime());
- int pos = 0,start=0;
- StringBuffer dateStrBuf=new StringBuffer(str);
- for (pos = start + 25; dateStrBuf.charAt(pos) != 'X'; pos++) ;
- Calendar calendar=Calendar.getInstance();
- int offset = calendar.get(Calendar.ZONE_OFFSET) +calendar.get(Calendar.DST_OFFSET);
- if (offset < 0) {
- dateStrBuf.setCharAt(pos++, '-');
- offset = (-offset);
- } else dateStrBuf.setCharAt(pos++, '+');
- int rawOffsetInMins = offset / 60 / 1000; // offset from GMT in mins
- int offsetInHrs = rawOffsetInMins / 60;
- int offsetInMins = rawOffsetInMins % 60;
- dateStrBuf.setCharAt(pos++, Character.forDigit((offsetInHrs/10), 10));
- dateStrBuf.setCharAt(pos++, Character.forDigit((offsetInHrs%10), 10));
- dateStrBuf.setCharAt(pos++, Character.forDigit((offsetInMins/10), 10));
- dateStrBuf.setCharAt(pos++, Character.forDigit((offsetInMins%10), 10));
- return dateStrBuf.toString()+ " (CEST)";
- }
- public static String base64encode(String plain) {
- int maxturns;
- StringBuffer sb=new StringBuffer();
- byte[] enc=new byte[3];
- boolean end=false;
- for(int i=0,j=0; !end; i++) {
- char _ch=plain.charAt(i);
- if(i==plain.length()-1) end=true;
- enc[j++]=(byte)plain.charAt(i);
- if(j==3 || end) {
- int res;
- res=(enc[0] << 16)+(enc[1] << 8)+enc[2];
- int b;
- int lowestbit=18-(j*6);
- for(int toshift=18; toshift>=lowestbit; toshift-=6) {
- b=res >>> toshift;
- b&=63;
- if(b>=0 && b<26) sb.append((char)(b+65));
- if(b>=26 && b<52) sb.append((char)(b+71));
- if(b>=52 && b<62) sb.append((char)(b-4));
- if(b==62) sb.append('+');
- if(b==63) sb.append('/');
- if(sb.length()%76==0) sb.append("\r\n");
- }
- if(end) {
- if(j==1) sb.append("==");
- if(j==2) sb.append('=');
- }
- enc[0]=0; enc[1]=0; enc[2]=0;
- j=0;
- }
- }
- return sb.toString();
- }
- }