javax.mail.MessagingException: 502 Error: command not implemented
javax.mail.MessagingException: 500 Error: bad syntax
这2个错误,为什么我自己机器上好使,换台机器就不行了呢?一般出现这2个是什么原因?
下边是原代码import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class MailTest
{
// 21-30行把本程序所用变量进行定义。 具体在main中对它们赋植。
private MimeMessage mimeMsg; // MIME邮件对象
private Session session; // 邮件会话对象
private Properties props; // 系统属性
private boolean needAuth = false; // smtp是否需要认证
private String username = ""; // smtp认证用户名和密码
private String password = "";
private Multipart mp; // Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成//MimeMessage对象
public MailTest(String smtp)
{
setSmtpHost(smtp);
createMimeMessage();
}

public void setSmtpHost(String hostName)
{
System.out.println("设置系统属性:mail.smtp.host = " + hostName);
if (props == null)
props = System.getProperties(); // 获得系统属性对象
props.put("mail.smtp.host", hostName); // 设置SMTP主机
}
/**
* @return boolean
*/
public boolean createMimeMessage()
{
try {
System.out.println("准备获取邮件会话对象!");
session = Session.getDefaultInstance(props, null); // 获得邮件会话对象
}
catch (Exception e)
{
System.err.println("获取邮件会话对象时发生错误!" + e);
return false;
}
System.out.println("准备创建MIME邮件对象!");
try {
mimeMsg = new MimeMessage(session); // 创建MIME邮件对象
mp = new MimeMultipart(); // mp 一个multipart对象
// Multipart is a container that holds multiple body parts.
return true;
}
catch (Exception e)
{
System.err.println("创建MIME邮件对象失败!" + e);
return false;
}
}
/**
* @param need
* boolean
*/
public void setNeedAuth(boolean need) {
System.out.println("设置smtp身份认证:mail.smtp.auth = " + need);
if (props == null)
props = System.getProperties();
if (need) {
props.put("mail.smtp.auth","true");
} else {
props.put("mail.smtp.auth","false");
}
}
/**
* @param name
* String
* @param pass
* String
*/
public void setNamePass(String name, String pass)
{
System.out.println("程序得到用户名与密码");
username = name;
password = pass;
}
/**
* @param mailSubject
* String
* @return boolean
*/
public boolean setSubject(String mailSubject) {
System.out.println("设置邮件主题!");
try {
mimeMsg.setSubject(mailSubject);
return true;
}
catch (Exception e) {
System.err.println("设置邮件主题发生错误!");
return false;
}
}
/**
* @param mailBody
* String
*/
public boolean setBody(String mailBody)
{
try
{
System.out.println("设置邮件体格式");
BodyPart bp = new MimeBodyPart();
bp.setContent(
"<meta http-equiv=Content-Type content=text/html; charset=gb2312>"
+ mailBody, "text/html;charset=GB2312");
mp.addBodyPart(bp);
return true;
}
catch (Exception e)
{
System.err.println("设置邮件正文时发生错误!" + e);
return false;
}
}
/**
* @param name
* String
* @param pass
* String
*/
public boolean addFileAffix(String filename) {
System.out.println("增加邮件附件:" + filename);
try {
BodyPart bp = new MimeBodyPart();
FileDataSource fileds = new FileDataSource(filename);
bp.setDataHandler(new DataHandler(fileds));
bp.setFileName(fileds.getName());
mp.addBodyPart(bp);
return true;
}
catch (Exception e) {
System.err.println("增加邮件附件:" + filename + "发生错误!" + e);
return false;
}
}
/**
* @param name
* String
* @param pass
* String
*/
public boolean setFrom(String from) {
System.out.println("设置发信人!");
try {
mimeMsg.setFrom(new InternetAddress(from)); // 设置发信人
return true;
}
catch (Exception e)
{
return false;
}
}
/**
* @param name
* String
* @param pass
* String
*/
public boolean setTo(String to)
{
System.out.println("设置收信人");
if (to == null)
return false;
try
{
mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress
.parse(to));
return true;
}
catch (Exception e)
{
return false;
}
}
/**
* @param name
* String
* @param pass
* String
*/
public boolean setCopyTo(String copyto)
{
System.out.println("发送附件到");
if (copyto == null)
return false;
try {
mimeMsg.setRecipients(Message.RecipientType.CC,
(Address[]) InternetAddress.parse(copyto));
return true;
}
catch (Exception e)
{
return false;
}
}
/**
* @param name
* String
* @param pass
* String
*/
public boolean sendout()
{
try
{
mimeMsg.setContent(mp);
mimeMsg.saveChanges();
System.out.println("正在发送邮件....");
Session mailSession = Session.getInstance(props, null);
Transport transport = mailSession.getTransport("smtp"); // 通行证
transport.connect((String) props.get("mail.smtp.host"), username,
password);
transport.sendMessage(mimeMsg, mimeMsg
.getRecipients(Message.RecipientType.TO));
// transport.send(mimeMsg);
System.out.println("发送邮件成功!");
transport.close();
return true;
}
catch (Exception e)
{
System.err.println("邮件发送失败!" + e);
return false;
}
}
/**
* Just do it as this
*/
public static void main(String[] args)
{
String mailbody = "这是内容";
MailTest themail = new MailTest("smtp.163.com");
themail.setNeedAuth(true);
if (themail.setSubject("这是标题") == false)
return;
//邮件内容 支持html 如 <font color=red>欢迎光临</font> <a href=\"http://www.laabc.com\">啦ABC</a>
if (themail.setBody(mailbody) == false)
return;
//收件人邮箱
if (themail.setTo("[email protected]") == false)
return;
//发件人邮箱
if (themail.setFrom("[email protected]") == false)
return;
//设置附件
// if (themail.addFileAffix("C:/激活码.txt") == false)
// return; // 附件在本地机子上的绝对路径
themail.setNamePass("123", "123456"); // 用户名与密码
if (themail.sendout() == false)
return;
}
}

解决方案 »

  1.   

    我是不自己架的服务器,我是用的163的smtp服务啊,写的我自己的帐号密码,但是不好使
      

  2.   

    查一下别人机子的网络防火墙有没有设置好,能不能连到smtp服务器。
      

  3.   

    别人机器的防火墙问题  下面地址 看看对你有帮助没
    http://steven1981.itpub.net/post/7967/271270
      

  4.   

    on the machine where Jira is installed, the /etc/hosts file was wrong, in fact the alias of Jira machine was different from his hostname so EHLO and HELO commands were send without ID but now it's all OK!
    http://jira.atlassian.com/browse/JRA-9892
      

  5.   

    先检查下系统环境,例如防火墙、DNS解析、网络设置等等,若没有这换向阀问题时,看看是不是另台机器上JDK或WEB容器中已经有了JavaMail实现包,且与你项目中实现包发生冲突。详情见:
    http://howsun.blog.sohu.com/129043957.html