代码如下:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class RetirveMail {
private Properties props;
private Session session;
private MimeMessage[] message;

public RetirveMail()
{
props = System.getProperties();
props.put("mial.store.protocol","imap");    
 
 session = Session.getDefaultInstance(props, null);
 
}

public void getStore()
{
try{ 
Store store=session.getStore("imap");
store.connect("imap.qq.com", "********", "*****");

Folder folder = store.getFolder("INBOX");
folder.open(folder.READ_ONLY);
int i  = folder.getMessageCount() ;
System.out.println(i);
}
catch (Exception e)
{
System.out.println(e);
}
}

public void printmessage()
{
try{
System.out.println(message[0].getSubject());}
catch(Exception e)
{

}
}
}红色的部分是出错的部分,好像连接不上QQMAIL的服务器,我尝试过用THUNDERBIRD,可以顺利连接服务器,但是用JAVAMAIL就不能连接,不知道是不是我的代码有问题?
抛出的异常是:javax.mail.AuthenticationFailedException: no mechanism available
希望有人能帮忙解答下,谢谢~

解决方案 »

  1.   

    为啥不这样做:import java.util.Date;
    import java.util.Properties;import javax.mail.Authenticator;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.URLName;
    import javax.mail.internet.AddressException;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;public class MyEmail {
        //发件人邮箱的用户名和密码
        private static final String SEND_EMAIL = "******";//发件人邮箱地址
        
        private static final String SEND_EMAIL_PASSWORD = "******";//发件人邮箱密码
        
        private static final String SEND_EMAIL_ACCOUNT = "******";//发件人邮箱账户名
        
        private static final String SEND_SMTP = "smtp.gmail.com";//SMTP
        
        private static final String SMTP_PORT = "465";//SMTP端口
        
        private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
        
        private static final String RECEIVE_EMAIL = "******";//收件人地址
        
        
        public static void main(String[] args) throws AddressException,
        MessagingException {
    Properties props = System.getProperties();

    props.setProperty("mail.smtp.host", SEND_SMTP);// 服务主机地址
    props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
    props.setProperty("mail.smtp.socketFactory.fallback", "false");
    props.setProperty("mail.smtp.port", SMTP_PORT);// 端口
    props.setProperty("mail.smtp.socketFactory.port", SMTP_PORT);
    props.put("mail.smtp.auth", "true");// 是否要验证身份
    // 验证用户名和密码
    Session session = Session.getDefaultInstance(props,
    new Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(SEND_EMAIL, SEND_EMAIL_PASSWORD);
        }
    });
    Message msg = new MimeMessage(session); // 发送邮件地址
    msg.setFrom(new InternetAddress(SEND_EMAIL));
    // 接受邮件地址
    msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(RECEIVE_EMAIL, false));
    msg.setSubject("测试邮件是否发送成功!");
    msg.setText("测试,测试,测试,测试,测试,测试,测试,测试,测试,测试,测试,!!!!!!!!!!");
    msg.setSentDate(new Date());
    URLName urln = new URLName("smtp", SEND_SMTP, Integer.valueOf(SMTP_PORT).intValue(), null,
    SEND_EMAIL_ACCOUNT, SEND_EMAIL_PASSWORD);
    Transport t = session.getTransport(urln);
    t.send(msg); System.out.println("邮件发送成功!");
        }
    }
      

  2.   

    qq的POP3/IMAP/SMTP服务需要开启,默认是没有开启的!
      

  3.   

    都开启了,我发现是连接IMAP方式的原因,IMAP协议是以文本形式进行LOGIN,而JAVAMAIL默认是的PLAIN模式进行LOGIN,因此,在
    PROPS.PUT("MAIL.IMAP.AUTH.PLAIN.DISABLE","TRUE")即可。。
      

  4.   

    您这个是发送邮件的吧。。我那个是接收邮件的。。
    发送邮件不牵扯到IMAP的问题啊