使用scala或java在不使用SMTP的情况下使用Exchange Server发送邮件

时间:2013-07-16 07:21:24

标签: scala javamail

在我的应用中,我们使用MS Exchange服务器发送电子邮件。但我们没有使用SMTP。我们必须在不使用SMTP的情况下发送邮件。

早些时候我发送带有SMTP的Gail服务器的邮件。但我没有找到任何解决方案,无需使用SMTP即可使用Exchange服务器发送邮件。

请为我推荐一个很好的解决方案

编辑: Php代码

<?php

// Set basic message parameters
$from = 'noreply@company.com';
$to = 'customer@example.com';
$subject = 'Test Message';
$message = 'Hello';

// Set additional headers for HTML email
$headers = 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\n";
$headers .= 'X-Mailer: PHP/' . phpversion() . "\n";
$headers .= 'From: ' . $from;

// Send mail
if (mail($to, $subject, $message, $headers)) {
      echo 'Message sent';
} else {
      echo 'Message sending failed';
}

?>

是否可以在不使用SMTP端口和主机的情况下发送邮件?

4 个答案:

答案 0 :(得分:0)

基本上,如果不与SMTP服务器交互,您就无法发送电子邮件(可能会隐式发生)。

PHP的mail()函数实际上在Linux / Unix环境中执行本机二进制文件(例如sendmail命令,但在Windows上它需要一些配置才能正常工作 - 操作系统是哪个操作系统有吗?)。

因此,如果要使用相同的机制,请调用二进制sendmail命令(ProcessBuilderRuntime.exec()是Java中的朋友,或Scala中的scala.sys.process.package

答案 1 :(得分:0)

如果您的服务器上可以访问电子邮件,则可以使用Exchange Web服务发送电子邮件。

Here您可以下载EWS Java API。它很老(编码很差),但应该足以发送电子邮件。

答案 2 :(得分:0)

答案 3 :(得分:0)

我写了一个发现自己在Spark Pipelines中经常使用的函数,该函数使用sendmail函数(内置在几乎所有的Linux发行版中)并以HTML格式发送电子邮件。我主要在管理员已经配置了postfix(几乎所有)的情况下使用它。

它使用base64编码在scala中对html模板进行编码,然后在bash中无缝解码和执行,而不会因bash字符串插值与scala和流程执行相结合而带来任何麻烦。没有临时文件,只有纯粹的执行。

注意: 1)如果您在Spark集群模式下像我一样使用它,则应首先在所有数据节点上对其进行测试,因为它将从其中一个执行并失败。 2)我不需要stdout,因为我不需要它。如果确实这样做,则只需添加一个Stringbuffer并在message_success val的末尾使用记录器拆分输出。

发送HTML电子邮件

import java.util.Base64
import java.nio.charset.StandardCharsets
import scala.sys.process._

def scalaSendMail(html_message: String, subject: String, to: Array[String], from: String=""): String = {
    val message64 = Base64.getEncoder.encodeToString(html_message.getBytes(StandardCharsets.UTF_8))
    val prepped_recipients = to.mkString(",")
    val bash_wrapper = """(echo "From: """ + from + """";
       echo "To: """ + prepped_recipients + """";
       echo "Subject: """ + subject + """";
       echo "Content-Type: text/html";
       echo "MIME-Version: 1.0";
       echo "";
       echo """" + message64 + """" | base64 --decode
    ) | sendmail -t """ 
    val mesage_success = Seq("sh", "-c", bash_wrapper).!!
    return mesage_success
}