【问题标题】:Send/Receive Email from within Web Application?从 Web 应用程序中发送/接收电子邮件?
【发布时间】:2013-04-13 21:02:19
【问题描述】:

我有一个订单管理 (Web) 应用程序(在 Java/Java EE 中)。

应用程序用户希望从 Web 应用程序内向下订单的客户发送接收电子邮件通信。电子邮件跟踪必须与订单相关联。

用例是

  1. 用户打开订单详细信息页面。订单信息。显示。
  2. 在该页面上 - 单击电子邮件图标,它将显示该订单截至日期的所有电子邮件通信(已发送/已接收)。
  3. 对于该订单 - 您可以查看新收到的邮件、回复邮件或向客户发送新邮件 - 所有这些都与该订单相关。

问题:

  1. 发送电子邮件很简单,但如何在应用程序内接收电子邮件?
  2. 这里的电子邮件帐户是什么 - 一个名为 orders@myorg.com 的普通电子邮件帐户(并且基于主题行/某些标题电子邮件被过滤等)或者是 orderid@myorg.com(在这种情况下是新电子邮件每个订单都需要创建帐户)或?
  3. 我们已经有了 Microsoft Exchange Server,公司电子邮件通过它传送。我们能否以某种方式利用它,还是需要设置一个新的邮件服务器?

欢迎提出任何想法。

【问题讨论】:

    标签: java email jakarta-ee web-applications smtp


    【解决方案1】:

    如果您愿意承担依赖,Spring Integration 可以轻松地从指定服务器以轮询(POP3、IMAP)或事件驱动(IMAP-IDLE)的方式阅读电子邮件。 [1 & 3]

    [2] 您可以使用专用邮件帐户,根据传入邮件的主题(或其他字段)过滤发送到下游渠道的邮件。以下来自 Spring 站点的 sn-p 说明了这一点:

       <int-mail:imap-idle-channel-adapter id="customAdapter"
    store-uri="imaps://some_google_address:${password}@imap.gmail.com/INBOX"
    channel="receiveChannel"    
    should-mark-messages-as-read="true"
    java-mail-properties="javaMailProperties"
    mail-filter-expression="subject matches '(?i).*Spring Integration.*'"/>
    

    mail-filter-expression 过滤将被清除的电子邮件receiveChannel。对于所有相关方(频道),您将拥有一个 &lt;int-mail:imap-idle-channel-adapter/&gt; 监听您的 Exchange 服务器。

    虽然使用起来并不麻烦,但我建议您查看short overview of EAI according to springof EAI in general

    【讨论】:

      【解决方案2】:

      从用户的角度来看,我认为保持特定主题更加困难。我建议使用 myapp.myorg.com 之类的子域或 myapp.com 之类的新域

      无论哪种方式都有一个全部,因此所有邮件都会发送到特定的电子邮件,例如 orders@myapp.myorg.com

      然后您的脚本可以检查真正的 TO。这可能更自然、更“酷” -> 每个订单都有自己的邮件 ID!最重要的是,使用 James 或其他邮件软件来传递您的代码。

      【讨论】:

      • 如果你需要看一个活生生的例子,可以在 x10hosting 上创建一个帐户(谷歌它,他们有他们域的子域的免费计划)在他们的控制面板上/邮件可以配置一个包罗万象
      • 但是我会说一百万个订单我负担不起创建这么多邮件 ID....随着新订单不断在我的系统中创建,这太动态了。
      • 您不需要创建任何内容。它包罗万象,这意味着当邮件到达 xxx@aa.com 时,如果电子邮件帐户不存在,那么它会被路由到默认电子邮件帐户(可能是该域或另一个域的一部分(例如 default_myapp@gmail.com)。 com ) 见en.wikipedia.org/wiki/Catch-all | cpanel 如何siteground.com/tutorials/email/catch_all_email.htm
      【解决方案3】:
      1. 接收电子邮件 这是阅读电子邮件Are there any good short code examples that simply read a new gmail message?

      2. 的示例代码
      3. 此处的电子邮件帐户 为每个用户创建一个电子邮件帐户,并将用户的 Web 应用程序凭据也用作电子邮件的凭据。 使用散列订单 ID 作为主题的一部分,将每个电子邮件链与特定订单相关联。

      4. Microsoft Exchange 服务器 使用 exJello 是 JavaMail 提供者 (http://www.exjello.org/) 或将 JavaMail API 与 DavMail 网关一起使用 (http://davmail.sourceforge.net/)

      【讨论】:

        【解决方案4】:

        您需要以下内容。

        1. Java Mail API 通过一些交换服务器以编程方式发送电子邮件。
        2. 我建议使用专用的电子邮件服务器来接收特定于应用程序的电子邮件。您可以使用James 来执行此操作。您可以通过此软件收发电子邮件。
        3. 如果您使用现有的 Microsoft Exchange Server,则始终可以使用重定向到您的应用程序特定的电子邮件服务器。

        【讨论】:

        • Indoknight> 我组织的所有电子邮件(格式为“user@myorg.com”)都由现有的 Exchange Server 接收(用于“@myorg.com”电子邮件)。如果我也必须使用“@myorg.com”,我想我不能使用新的/单独的电子邮件服务器。
        • @Jasper 没问题,您仍然可以使用 Java 邮件 API。我刚刚找到了一篇关于这个的文章 1) javatpoint.com/example-of-receiving-email-using-java-mail-api 2) metoojava.wordpress.com/2010/03/21/…
        • IndoKnight> 谢谢。所以也许我会有一个像 orders@myorg.com 这样的电子邮件 ID,通过它发送/接收所有订单电子邮件。我的 appln 用户只需要查看与他们正在查看的特定订单 ID 相关的电子邮件。我可以在主题行中有订单 ID,并根据它进行过滤 - 但还有其他想法吗?
        • 抱歉回复晚了。是的,这是可能的。通常,发送给客户的电子邮件 ID 采用 noreply@myorg.com 形式,并接收 enquiries@myorg.com 之类的信息。这样,您可以将发送和接收的电子邮件 id 分开,以便更好地管理。
        猜你喜欢
        • 2014-11-03
        • 2015-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-28
        • 2010-12-27
        • 2016-02-01
        相关资源
        最近更新 更多