在ColdFusion中以编程方式验证邮件服务器连接

Ser*_*gii 6 java coldfusion smtp railo cfml

我正在使用自定义SMTP服务器,并希望在用户输入自己的服务器凭据时验证连接.

与添加邮件服务器时Adobe CF和Railo允许的检查完全相同.

当然,这并不能保证交付工作正常,但至少要检查输入的服务器/用户名/通行证是否有效.

我可以看到一个棘手的方法:尝试使用cfmail发送电子邮件并检查邮件日志.但我相信它可以更优雅地完成.

是否有标准ACF/Railo发行版的Java库可以帮助我?我该如何使用它们?例子受到高度赞赏.

提前致谢.

编辑:

请不要与Java标签混淆.CFML需要解决方案.虽然它可以使用一些Java库,但如果适用的话.

Lei*_*igh 6

我认为sfussenegger有正确的想法.但是,不是使用自定义身份验证器,而是通过connect(..)进行身份验证?仅用gmail测试过.但似乎有效.

编辑:我成功地用CF9和OBD测试了这个.不幸的是,我对Railo没有运气......真糟糕.

编辑:更新以添加缺少的"mail.smtp.auth"属性.它现在应该与Railo一起正常工作.

    //Java Version
    int port = 587;
    String host = "smtp.gmail.com";
    String user = "username@gmail.com";
    String pwd = "email password";

    try {
        Properties props = new Properties();
        // required for gmail 
        props.put("mail.smtp.starttls.enable","true");
        props.put("mail.smtp.auth", "true");
        // or use getDefaultInstance instance if desired...
        Session session = Session.getInstance(props, null);
        Transport transport = session.getTransport("smtp");
        transport.connect(host, port, user, pwd);
        transport.close();
        System.out.println("success");
     } 
     catch(AuthenticationFailedException e) {
           System.out.println("AuthenticationFailedException - for authentication failures");
           e.printStackTrace();
     }
     catch(MessagingException e) {
           System.out.println("for other failures");
           e.printStackTrace();
     }



<cfscript>
    //CF Version
    port = 587;
    host = "smtp.gmail.com";
    user = "username@gmail.com";
    pwd = "email password";

    try {
        props = createObject("java", "java.util.Properties").init();
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.auth", "true");
        // or use getDefaultInstance instance if desired...
        mailSession = createObject("java", "javax.mail.Session").getInstance(props, javacast("null", ""));
        transport = mailSession.getTransport("smtp");
        transport.connect(host, port, user, pwd);
        transport.close();
        WriteOutput("success");
     } 
     //for authentication failures
     catch(javax.mail.AuthenticationFailedException e) {
           WriteOutput("Error: "& e.type &" ** "& e.message);
     }
     // for other failures
     catch(javax.mail.MessagingException e) {
           WriteOutput("Error: "& e.type &" ** "& e.message);
     }
</cfscript>
Run Code Online (Sandbox Code Playgroud)