typw520 2011-01-06 10:04
浏览 229
已采纳

邮件检查问题

下面是我的代码,问题出的不知道什么原因,不知道是不是系统区别问题,在windows下面运行是可以正常检查出来,但是在Linux下面就不行了,求解答
[code="java"]package string.code;

import java.io.IOException;

import org.apache.commons.net.smtp.SMTPClient;
import org.apache.commons.net.smtp.SMTPReply;
import org.xbill.DNS.Lookup;
import org.xbill.DNS.Record;
import org.xbill.DNS.Type;

public class CheckEmailObj {

public static boolean checkEmail(String email) {
    DealString ds = new DealString();

    // if (!email.matches("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+")) {
    if (ds.emailFormat(email) == false) {
        // System.err.println("Format error");
        return false;
    }
    getProperties getset = new getProperties();
    String efrom = getset
            .readValue("gecxml/config.properties", "mail.from");
    String[] efromarray = efrom.split("@");
    String log = "";
    String host = "";
    String hostName = email.split("@")[1];
    Record[] result = null;
    SMTPClient client = new SMTPClient();

    try {
        System.out.println(hostName + "       hostName");

        System.out.println(Type.MX + "        Type.MX");
        // 查找MX记录
        Lookup lookup = new Lookup(hostName, Type.MX);

        System.out.println(lookup + "      lookup");

        lookup.run();

        System.out.println(lookup.getAnswers() + "     lookup.getAnswers()");

        System.out.println(lookup.getResult() + "      lookup.getResult()");

        System.out.println(Lookup.SUCCESSFUL + "       Lookup.SUCCESSFUL");

        if (lookup.getResult() != Lookup.SUCCESSFUL) {
            log += "找不到MX记录\n";
            return false;
        } else {
            result = lookup.getAnswers();
        }

        // 连接到邮箱服务器
        for (int i = 0; i < result.length; i++) {
            host = result[i].getAdditionalName().toString();

            client.connect(host);
            if (!SMTPReply.isPositiveCompletion(client.getReplyCode())) {
                client.disconnect();
                continue;
            } else {
                log += "MX record about " + hostName + " exists.\n";
                log += "Connection succeeded to " + host + "\n";
                break;
            }
        }
        log += client.getReplyString();

        // HELO cyou-inc.com

        client.login(efromarray[0].toString());

        log += ">HELO localhost\n";
        log += "=" + client.getReplyString();

        // MAIL FROM: <zhaojinglun@cyou-inc.com>

        client.setSender("info@localhost.org");
        log += ">MAIL FROM: <info@localhost.org>\n";
        log += "=" + client.getReplyString();

        // RCPT TO: <$email>
        client.addRecipient(email);
        log += ">RCPT TO: <" + email + ">\n";
        log += "=" + client.getReplyString();

        if (250 == client.getReplyCode()) {
            return true;
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            client.disconnect();
        } catch (IOException e) {
        }
        // 打印日志
        System.err.println(log);
    }
    return false;
}[/code]
  • 写回答

2条回答 默认 最新

  • jiangguangxian 2011-01-06 14:15
    关注

    既然不是程序问题,那有可能就是linux下的host映射,访问权限等等问题,这个你不要通过程序来找问题,通过你的机器来找问题,首先能上网是不行的,试试能不能ping通stmp.163.com再说。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 vmware exsi重置后的密码
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?
  • ¥15 电磁场的matlab仿真
  • ¥15 mars2d在vue3中的引入问题
  • ¥50 h5唤醒支付宝并跳转至向小荷包转账界面