【问题标题】:Java send mail automatically with local mail clientJava 使用本地邮件客户端自动发送邮件
【发布时间】:2013-07-04 22:20:16
【问题描述】:

我想在一个 java 程序中通过用户的本地邮件客户端自动发送邮件。

我使用以下代码打开客户端并填写必填字段,但我现在如何在无需任何用户交互的情况下自动发送?

    private void sendMail() throws MessagingException {
    try {
        Desktop.getDesktop().mail(new URI("mailto:abc@def.com?subject=someSubject&cc=aa@bb.cc,dd@dd.ds&bcc=x@y.zz&body=someBodyText"));
    } catch (Exception e) {
        e.printStackTrace();
    }

}

基本上我想发送不离开公司网络的邮件。

【问题讨论】:

  • 没有适用于所有邮件客户端的 API,因此最好的选择是使用 Java Mail API 并直接发送邮件。
  • 我一直在玩弄 Java Mail API,我的主要问题是我不知道客户端机器上将运行哪个邮件服务器。我对以下属性使用什么值:mail.smtp.host。我知道客户端将位于包含邮件服务器的本地网络中,但我不知道它的“名称”。

标签: java email


【解决方案1】:

答案是Java Mail API

基本上,你需要一个邮件账户(通常是用户名+密码),你还需要邮件SP的SMTP服务器地址,通常在他们的网站上。

【讨论】:

  • 应用程序将在各种完全独立的网络上运行。我所知道的是每个网络都会有一个邮件服务器,但我不知道它的地址。有什么简单的方法可以从注册表中检索这些信息?
  • 您需要了解更多关于这些网络的信息,不要假设它们的配置。询问管理员,就您的程序如何与环境交互达成一致。
  • 好吧,如果没有办法找到它,我将不得不要求用户提供此信息。我希望以某种方式从用户的邮件客户端中提取此信息。
【解决方案2】:

按照本指南,我至少找到了一种处理前景的方法:Vogella, Eclipse-Microsoft Integration

基本上我使用 OleClientSite 类来调用 Outlook。然后我使用 oleAutomation 类来发送邮件。

代码sn-p:

            Shell shell = new Shell(Display.getDefault());
            OleFrame frame = new OleFrame(shell, SWT.NONE);
            // This should start outlook if it is not running yet
            OleClientSite site = new OleClientSite(frame, SWT.NONE, "OVCtl.OVCtl");
            site.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);
            // Now get the outlook application
            OleClientSite site2 = new OleClientSite(frame, SWT.NONE,
                "Outlook.Application");
            OleAutomation outlook = new OleAutomation(site2);
            // 
            OleAutomation mail = invoke(outlook, "CreateItem", 0 /* Mail item */)
                .getAutomation();
            setProperty(mail, "To", "aav@gmail.com"); /*
                                   * Empty but could also be
                                   * predefined
                                   */

            setProperty(mail, "Bcc", "test@gmail.com"); /*
                                   * Empty but could also be
                                   * predefined
                                   */

            setProperty(mail, "BodyFormat", 2 /* HTML */);
            setProperty(mail, "Subject", "Top News for you");
            setProperty(mail, "HtmlBody",
                "<html>Hello<p>, please find some infos here.</html>");

            invoke(mail, "Send" /* or "Send" */);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-11
    • 2020-12-22
    • 1970-01-01
    • 2021-05-23
    • 2012-07-07
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多