send mail using smtp to hotmail

Joined
Oct 10, 2006
Messages
1
Reaction score
0
I have a classe to send mails. It runs on yahoo well but with hotmail I never receive the mails.I do not receive an error neither.

I would need some strange header to make the hotmail like my email????

My code is:

<code>
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: (e-mail address removed)\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 = "(e-mail address removed)";
String sFromRealName = "root";
String sToAdr1 = "(e-mail address removed)";
String sToAdr2 = "(e-mail address removed)";
String sToAdr3 = "(e-mail address removed)";
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(thewei ght)>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();
}
}
</code>

Thanks!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,906
Latest member
SkinfixSkintag

Latest Threads

Top