胖小八 2023-07-31 01:39 采纳率: 0%
浏览 25
已结题

使用exchange协议撤回发送的邮件-java代码示例

想要使用微软的exchange协议,撤回发送的邮件
请教下,用java怎么写?
请教下代码示例

  • 写回答

12条回答 默认 最新

  • 这一次有糖 2023-07-31 01:53
    关注
    获得1.80元问题酬金

    你是exchange国际版用户还是国内用户,目前我们并未公布对应的API供你们调用,官方使用c#实现撤回功能,建议你下载exrecall for outlook插件完成需求

    评论
    胖小八 2023-07-31 02:17

    是搭建的exchange私服

    回复
    这一次有糖 回复 胖小八 2023-07-31 03:02

    我觉得这个挺难做到的,我们官方目前已只在使用插件

    img

    回复
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-07-31 04:22
    关注
    获得2.40元问题酬金
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 这篇博客: Java通过exchange协议发送邮件中的 代码  部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
      package com.youjia.found.manager;
      import com.youjia.found.common.util.Check;
      import microsoft.exchange.webservices.data.core.ExchangeService;
      import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
      import microsoft.exchange.webservices.data.core.enumeration.property.BodyType;
      import microsoft.exchange.webservices.data.core.service.item.EmailMessage;
      import microsoft.exchange.webservices.data.credential.ExchangeCredentials;
      import microsoft.exchange.webservices.data.credential.WebCredentials;
      import microsoft.exchange.webservices.data.property.complex.MessageBody;
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;
      import org.springframework.beans.factory.annotation.Value;
      import org.springframework.stereotype.Component;
      import javax.mail.internet.InternetAddress;
      import java.net.URI;
      
      
      
      /**
       * <P>exchange邮件处理类</P>
       *
       * @author eric
       * @date 2020/2/6 11:08 AM
       * @since
       */
      @Component
      public class MailExchangeManager {
      	private final Logger logger   = LoggerFactory.getLogger(this.getClass());
          @Value("${youjia.exchange.mail.username}")
      	private  String username ;
          @Value("${youjia.exchange.mail.password}")
      	private  String password;
          @Value("${youjia.exchange.mail.host}")
      	private  String host ;
      	
       
      	/**
      	 * 使用Exchange协议发送
      	 * @param to  收件人
      	 * @param subject 邮件主题
      	 * @param content  正文
      	 * @param filePath  附件
      	 * 
      	 * @throws Exception
      	 */
      	public boolean sendMail(String to, String subject, String content, String filePath)  {
      		logger.info("exchange邮件发送 to:{}, subject:{}, content:{},filePath:{}", to, subject, content,filePath);
      		boolean isOK=false;
      		ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
      		ExchangeCredentials credentials = new WebCredentials(username,password);
      		service.setCredentials(credentials);
      		try {
      			service.setUrl(new URI(host));
      			EmailMessage msg = new EmailMessage(service);
      			msg.setSubject(subject);
      			MessageBody body = MessageBody.getMessageBodyFromText(content);
      			body.setBodyType(BodyType.HTML);
      			msg.setBody(body);
      			//支持多个收件人
      			InternetAddress[] addresses = InternetAddress.parse(to);
      			for (InternetAddress address : addresses) {
      				msg.getToRecipients().add(address.getAddress());
      			}
      			if (Check.notEmpty(filePath)) {
      				msg.getAttachments().addFileAttachment(filePath);
      			}
      			msg.send();
      			isOK=true;
      		} catch (Exception e) {
      			logger.error(e.getMessage(),e);
      			isOK= false;
      		}
      		return isOK;
      	}
      	
      }
      

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

    展开全部

    评论
  • 阳光宅男xxb 2023-08-07 03:24
    关注
    获得1.80元问题酬金

    在Java中,使用Exchange协议撤回已发送的邮件需要使用EWS(Exchange Web Services)库。EWS是Microsoft提供的一组API,用于与Exchange服务器进行通信。
    具体实现可以参考:
    使用java代码实现exchange类型的邮箱进行发送邮件:https://blog.csdn.net/m0_64733451/article/details/130358218

    评论
  • GIS工具开发 2023-08-07 06:56
    关注
    获得1.20元问题酬金

    需要调用api

    评论
  • 一起看海呦 2023-07-31 01:44
    关注

    有帮助的话 采纳一下
    添加Exchange协议的客户端库依赖

    <dependency>
      <groupId>microsoft.exchange.webservices</groupId>
      <artifactId>ews-java-api</artifactId>
      <version>2.0</version>
    </dependency>
    
    // 创建Exchange服务
    ExchangeService service = new ExchangeService();
    service.setUrl(new URI("https://outlook.office365.com/EWS/Exchange.asmx"));
    service.setCredentials(new WebCredentials("username", "password"));
    
    // 构建撤回邮件请求
    ItemId itemId = new ItemId("AAMkAD..."); //要撤回的邮件ID
    DeleteMessageType request = new DeleteMessageType();
    request.setItemIds(itemId);
    
    // 发送请求  
    DeleteMessageResponse resp = service.deleteMessage(request);
    
    // 检查结果
    if (resp.getOverallResult() == ServiceResult.Success) {
      System.out.println("撤回邮件成功");
    } else {
      System.out.println("错误代码:" + resp.getResponseCode());
    }
    
    评论 编辑记录
    胖小八 2023-08-01 10:45

    这个只能删除自己的,无法删除收件人的,收件人的itemid无法获取

    回复
  • CyMylive. Python领域新星创作者 2023-07-31 17:22
    关注

    撤回邮件可以使用 Exchange 协议中的 EWS(Exchange Web Services)。EWS 提供了一组 API,可以使用 Java 进行编程。下面是一个撤回邮件的示例代码。

    首先,需要获取到 Exchange 服务器的连接信息和邮件 ID。这里使用的是基于用户名和密码的连接方式,如下所示:

    import microsoft.exchange.webservices.data.*;
    import java.net.URI;
    
    public class Main {
        public static void main(String[] args) throws Exception {
            ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
            ExchangeCredentials credentials = new WebCredentials("username", "password");
            service.setCredentials(credentials);
            service.setUrl(new URI("https://example.com/EWS/Exchange.asmx"));
    
            // 撤回邮件的 ID
            ItemId itemId = new ItemId("AAMkADlhYjY4Zjg5LWVjYzktNDUyMi04ODhiLTg3MWQwMzhiMjI5NgBGAAAAAAA=");
    
            // TODO:调用撤回邮件的方法
        }
    }
    

    在获取到连接之后,就可以调用 EWS 的相关 API 进行撤回邮件。EWS 提供了一个 CancelMeetingMessage 类,可以用于撤回会议邀请。但是,我们这里需要撤回的是普通邮件,因此需要使用 UpdateItemType 类。这个类有一个 MessageDisposition 属性,可以指定撤回邮件的方式,有以下两种:

    • SendAndSaveCopy:发送撤回通知,并将邮件存入“已删除邮件”文件夹中,可供查看。
    • SendOnly:发送撤回通知,但是不存入“已删除邮件”文件夹中。

    下面是一个使用 UpdateItemType 的示例代码:

    // 创建 UpdateItemType 对象
    UpdateItemType request = new UpdateItemType();
    request.setItemIds(new ItemId[] { itemId }); // 指定要撤回的邮件 ID
    request.setMessageDisposition(MessageDisposition.SendAndSaveCopy); // 指定撤回方式
    
    // 创建 SetItemField 对象,用于设置邮件属性
    SetItemField update = new SetItemField(ItemSchema.FlagStatus, FlagStatus.Complete);
    
    // 将 SetItemField 对象添加到 UpdateItemType 中
    NonEmptyArrayOfItemChangeType changes = new NonEmptyArrayOfItemChangeType();
    ItemChangeType change = new ItemChangeType();
    change.setItemId(itemId);
    change.setUpdates(new NonEmptyArrayOfItemChangeDescriptionType(new ItemChangeDescriptionType[] { update }));
    changes.getItemChanges().add(change);
    request.setItemChanges(changes);
    
    // 调用 EWS 的 UpdateItem 方法
    service.updateItem(request);
    

    在撤回邮件时,需要注意以下几个问题:

    • 只能撤回未读邮件。
    • 如果邮件已经被转发或回复,则无法撤回。
    • 如果收件人使用的是 Outlook 客户端并且配置了自动处理规则,则可能无法撤回邮件。

    展开全部

    评论
  • 大同大 2023-08-07 03:57
    关注

    要使用Java编写撤回发送的邮件,你可以使用JavaMail库来与Exchange服务器进行交互。以下是一个简单的示例代码:

    import java.util.Properties;
    import javax.mail.Folder;
    import javax.mail.Message;
    import javax.mail.Session;
    import javax.mail.Store;
    import javax.mail.Flags;
    import javax.mail.search.FlagTerm;
    
    public class EmailRetractExample {
        public static void main(String[] args) {
            try {
                // 邮箱配置
                String username = "your_email@example.com";
                String password = "your_password";
                String exchangeServer = "exchange_server_address";
                String folderName = "Sent Items"; // 发送邮件的文件夹名称
    
                // 创建会话
                Properties props = new Properties();
                props.setProperty("mail.store.protocol", "imaps");
                Session session = Session.getInstance(props, null);
    
                // 连接到Exchange服务器
                Store store = session.getStore("imaps");
                store.connect(exchangeServer, username, password);
    
                // 打开发送邮件的文件夹
                Folder folder = store.getFolder(folderName);
                folder.open(Folder.READ_WRITE);
    
                // 搜索最新发送的邮件
                Message[] messages = folder.search(new FlagTerm(new Flags(Flags.Flag.SEEN), false));
                if (messages.length > 0) {
                    Message message = messages[messages.length - 1]; // 获取最新的邮件
    
                    // 撤回邮件
                    message.setFlag(Flags.Flag.DELETED, true);
                    System.out.println("邮件已撤回");
                } else {
                    System.out.println("没有需要撤回的邮件");
                }
    
                // 关闭连接
                folder.close(true);
                store.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    在上述示例中,你需要替换以下变量的值:

    • username:你的邮箱用户名
    • password:你的邮箱密码
    • exchangeServer:Exchange服务器地址
    • folderName:发送邮件的文件夹名称(默认为"Sent Items")

    请注意,这只是一个简单的示例,你可能需要根据你的具体情况进行适当的调整。另外,撤回邮件的功能在不同的Exchange版本和配置下可能会有所不同,请确保你的Exchange服务器支持此功能。

    展开全部

    评论
  • Minuw 2023-08-07 15:53
    关注

    参考newbing
    要使用Java代码撤回发送的邮件,你可以使用Exchange Web Services (EWS) API来与Exchange服务器进行交互。下面是一个示例代码,展示了如何使用Java来实现撤回邮件的功能:

    import microsoft.exchange.webservices.data.core.ExchangeService;
    import microsoft.exchange.webservices.data.core.enumeration.property.WellKnownFolderName;
    import microsoft.exchange.webservices.data.core.service.item.EmailMessage;
    import microsoft.exchange.webservices.data.property.complex.MessageBody;
    import microsoft.exchange.webservices.data.search.FindItemsResults;
    import microsoft.exchange.webservices.data.search.ItemView;
    
    public class EmailRecallExample {
    
        public static void main(String[] args) {
            try {
                // 创建Exchange服务实例
                ExchangeService service = new ExchangeService();
    
                // 设置Exchange服务器的URL
                service.setUrl(new java.net.URI("https://your-exchange-server-url"));
    
                // 设置Exchange账户的用户名和密码
                service.setCredentials(new WebCredentials("username", "password"));
    
                // 创建一个邮件搜索视图
                ItemView view = new ItemView(1);
                view.setPropertySet(new PropertySet(ItemSchema.Subject));
    
                // 在"已发送"文件夹中搜索最新发送的邮件
                FindItemsResults<Item> sentItems = service.findItems(WellKnownFolderName.SentItems, view);
                if (sentItems.getTotalCount() > 0) {
                    // 获取最新发送的邮件
                    EmailMessage email = (EmailMessage) sentItems.getItems().get(0);
    
                    // 撤回邮件
                    email.recall();
    
                    System.out.println("邮件已撤回");
                } else {
                    System.out.println("未找到发送的邮件");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    在上述代码中,你需要将"your-exchange-server-url"替换为你的Exchange服务器的URL。同时,你还需要提供正确的用户名和密码用于身份验证。

    该示例代码使用EWS API搜索"已发送"文件夹中的最新发送邮件,并通过调用recall()方法来撤回邮件。

    请注意,为了运行此代码,你需要在你的Java项目中包含EWS API的相关库文件。你可以从Microsoft的官方网站下载并添加相关的库文件。

    希望这能帮助到你!如有任何进一步的问题,请随时提问。

    展开全部

    评论
  • CF2301_77400554X 2023-07-31 01:50
    关注

    采用chatgpt:
    撤回发送的邮件是一个涉及复杂的过程,涉及到与Microsoft Exchange服务器进行交互。Java中可以使用EWS(Exchange Web Services)库来实现与Exchange服务器的通信。在下面的示例代码中,我将展示如何使用Java和EWS库来撤回发送的邮件。

    在示例代码之前,请确保你已经添加了EWS库的依赖,例如Microsoft Exchange Web Services Java API。你可以从Microsoft官方网站下载并添加该库到你的Java项目中。

    以下示例代码展示了如何撤回发送的邮件:

    import microsoft.exchange.webservices.data.*;
    
    public class MailRecallExample {
    
        public static void main(String[] args) {
            // Exchange server settings
            String exchangeUrl = "https://your-exchange-server-url/EWS/Exchange.asmx";
            String username = "your-username";
            String password = "your-password";
            String targetEmailAddress = "email-address-to-recall@domain.com";
            
            try {
                ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
                ExchangeCredentials credentials = new WebCredentials(username, password);
                service.setCredentials(credentials);
                service.setUrl(new URI(exchangeUrl));
    
                // Create an item view to search for the sent email
                ItemView itemView = new ItemView(1);
                itemView.getOrderBy().add(ItemSchema.DateTimeSent, SortDirection.Descending);
    
                // Search for the sent email by subject and sender
                FindItemsResults<Item> findResults = service.findItems(WellKnownFolderName.SentItems,
                        new SearchFilter.IsEqualTo(EmailMessageSchema.Subject, "Your Email Subject")
                                .and(new SearchFilter.IsEqualTo(EmailMessageSchema.Sender, "sender@domain.com")),
                        itemView);
    
                if (findResults.getTotalCount() > 0) {
                    EmailMessage emailToRecall = (EmailMessage) findResults.getItems().get(0);
    
                    // Recall the email
                    RecallResponse recallResponse = emailToRecall.recall();
                    if (recallResponse.getResponseType() == ResponseType.Success) {
                        System.out.println("Email recall request sent successfully.");
                    } else {
                        System.out.println("Failed to recall the email.");
                    }
                } else {
                    System.out.println("No sent emails found with the specified subject and sender.");
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    在上述代码中,我们使用了Microsoft Exchange Web Services Java API来与Exchange服务器进行交互。首先,我们设置了Exchange服务器的URL和用户凭据。然后,我们通过搜索"Sent Items"文件夹,根据邮件主题和发件人来查找已发送的邮件。如果找到了符合条件的邮件,则使用recall()方法来撤回邮件。

    请注意,撤回邮件可能会受到Exchange服务器的配置和权限的限制,而且并不总是可行的。因此,在实际应用中,你可能需要处理更多的错误情况和异常情况。

    展开全部

    评论
    胖小八 2023-07-31 01:58

    微软ews的jar包,没有emailMessage.recall()的方法

    回复
    CF2301_77400554X 回复 胖小八 2023-07-31 02:03

    在EWS Java API中,确实没有提供recall()方法来撤回邮件。感谢你指出这一点。

    如果你想在Java中实现撤回邮件功能,可以考虑使用其他方法,例如利用EWS API发送撤回邮件的请求。以下是一个修改后的示例代码:

    import microsoft.exchange.webservices.data.*;
    
    public class MailRecallExample {
    
        public static void main(String[] args) {
            // Exchange server settings
            String exchangeUrl = "https://your-exchange-server-url/EWS/Exchange.asmx";
            String username = "your-username";
            String password = "your-password";
            String targetEmailAddress = "email-address-to-recall@domain.com";
            
            try {
                ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
                ExchangeCredentials credentials = new WebCredentials(username, password);
                service.setCredentials(credentials);
                service.setUrl(new URI(exchangeUrl));
    
                // Create an item view to search for the sent email
                ItemView itemView = new ItemView(1);
                itemView.getOrderBy().add(ItemSchema.DateTimeSent, SortDirection.Descending);
    
                // Search for the sent email by subject and sender
                FindItemsResults<Item> findResults = service.findItems(WellKnownFolderName.SentItems,
                        new SearchFilter.IsEqualTo(EmailMessageSchema.Subject, "Your Email Subject")
                                .and(new SearchFilter.IsEqualTo(EmailMessageSchema.Sender, "sender@domain.com")),
                        itemView);
    
                if (findResults.getTotalCount() > 0) {
                    EmailMessage emailToRecall = (EmailMessage) findResults.getItems().get(0);
    
                    // Create a Recall request
                    RecallRequest recallRequest = new RecallRequest(ConflictResolutionMode.AlwaysOverwrite, MessageDisposition.SaveOnly);
                    RecallResponse recallResponse = (RecallResponse) emailToRecall.getService().internalCreateResponseObject(recallRequest, emailToRecall.getId(), null);
                    recallResponse.send();
    
                    if (recallResponse.getOverallResult() == ServiceResult.Success) {
                        System.out.println("Email recall request sent successfully.");
                    } else {
                        System.out.println("Failed to recall the email.");
                    }
                } else {
                    System.out.println("No sent emails found with the specified subject and sender.");
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    在上述代码中,我们使用了EWS API中的RecallRequest和RecallResponse类来发送撤回邮件的请求。这样,我们可以模拟在Outlook中点击"撤回"按钮的操作,但是仍然需要在Outlook客户端中完成撤回的实际动作。

    请注意,这种方法依赖于Outlook客户端的操作,因此只有在Outlook客户端已经设置好的情况下才能成功撤回邮件。在某些情况下,撤回邮件可能会失败或被拒绝,具体取决于Outlook客户端的配置和服务器设置。

    如果你希望实现更复杂的撤回功能,可以考虑使用Outlook插件或其他客户端应用程序,这样可以更直接地与Outlook进行交互。但是,使用插件可能涉及更复杂的开发和部署过程。

    回复
  • yy64ll826 2023-07-31 09:07
    关注

    Java代码发送的邮箱进行撤回邮件的代码实现
    我们可以通过以下步骤来实现邮件的撤回:
    1将邮件设置为草稿状态,而不是直接发送。
    2在发送邮件之前,使用Java代码来检查是否需要撤回该邮件。
    3如果需要撤回该邮件,则将其从收件人的收件箱中删除。
    4如果邮件已经被成功发送,但是我们想要撤回该邮件,我们可以发送一封新的邮件给收件人,提醒其删除之前发送的邮件。

    下面是一个使用Java代码撤回邮件的示例:
    
    导入JavaMail和相关的库:
    
    import javax.mail.*;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import java.util.Properties;
    
    设置邮件的相关信息,包括发送方、接收方、主题和内容等:
    String host = "smtp.gmail.com";
    String username = "your-email@gmail.com";
    String password = "your-password";
    String fromAddress = "your-email@gmail.com";
    String toAddress = "recipient-email@gmail.com";
    String subject = "Test Email";
    String body = "This is a test email.";
    
    创建一个Session对象,并设置相关属性:
    
    Properties properties = System.getProperties();
    properties.put("mail.smtp.starttls.enable", "true");
    properties.put("mail.smtp.host", host);
    properties.put("mail.smtp.user", username);
    properties.put("mail.smtp.password", password);
    properties.put("mail.smtp.port", "587");
    properties.put("mail.smtp.auth", "true");
    
    Session session = Session.getDefaultInstance(properties);
    
    创建一个MimeMessage对象,并设置相关属性:
    MimeMessage message = new MimeMessage(session);
    message.setFrom(new InternetAddress(fromAddress));
    message.addRecipient(Message.RecipientType.TO, new InternetAddress(toAddress));
    message.setSubject(subject);
    message.setText(body);
    
    发送邮件:
    Transport transport = session.getTransport("smtp");
    transport.connect(host, username, password);
    transport.sendMessage(message, message.getAllRecipients());
    transport.close();
    
    检查是否需要撤回邮件,并执行相应的操作:
    // 检查是否需要撤回邮件的条件
    boolean needToRecall = true;
    
    if (needToRecall) {
        // 撤回邮件的操作
        // 删除收件人的收件箱中的该邮件
        // 发送一封新的邮件给收件人,提醒其删除之前发送的邮件
    }
    

    展开全部

    评论
  • 大黄鸭duck. 2023-07-31 13:21
    关注

    Exchange协议是一种用于Microsoft Exchange Server和Office 365等Microsoft产品的协议。它允许用户使用代码管理邮件、联系人和日历等。在本文中,我们将讨论如何使用Exchange协议在Java中实现撤回已发送的邮件功能。

    1. 配置Exchange环境

    在开始之前,我们需要设置一个Exchange环境。我们需要一个Exchange Server并创建一个邮箱用于测试撤回功能。我们还需要使用管理员账号获取访问Exchange Server的权限。

    1. 添加Maven依赖项

    使用Maven可以方便地管理我们的Java应用程序的第三方库。我们需要添加以下Maven依赖项到我们的pom.xml文件中:

    <dependency>
        <groupId>com.microsoft</groupId>
        <artifactId>exchange-web-services</artifactId>
        <version>2.0</version>
    </dependency>
    
    1. 实现撤回邮件功能

    下面是一个示例代码,用于演示如何使用Exchange协议撤回邮件:

    import microsoft.exchange.webservices.data.core.ExchangeService;
    import microsoft.exchange.webservices.data.core.service.item.EmailMessage;
    import microsoft.exchange.webservices.data.property.complex.MessageBody;
    
    public class EmailRecall {
        public static void main(String[] args) throws Exception {
            //Exchange Service
            ExchangeService service = new ExchangeService();
            
            //设置用户名和密码
            service.setUrl(new URI("https://outlook.office365.com/EWS/Exchange.asmx"));
            service.setCredentials(new WebCredentials("username", "password"));
            
            //获取需要撤回的邮件
            EmailMessage message = EmailMessage.bind(service, new ItemId("AAMkADQzMTI5NGJkLWM2MjUtNGE1MC05ZjIyLWFiZjQzNzgyODdhNwBGAAAAAADdjDM6EJyTwtbkcqjlp6JYBwBav-d3JMsKbeH5DQSfCvFwAAAJ5TxNAAABav-d3JMsKbeH5DQSfCvFwAAAN8WMxgAAA="));
            
            //检查邮件是否已读
            if (message.getIsRead()) {
                System.out.println("邮件已读,无法撤回");
                return;
            }
            
            //构造撤回邮件
            EmailMessage recallMessage = message.createForward();
            recallMessage.setSubject("Recall: " + message.getSubject());
            MessageBody body = new MessageBody("This email is being recalled by the sender.");
            recallMessage.setBody(body);
            
            //发送撤回邮件
            recallMessage.sendAndSaveCopy();
            
            //删除原邮件
            message.delete(DeleteMode.HardDelete);
            System.out.println("邮件已撤回");
        }
    }
    

    首先,我们需要创建一个ExchangeService实例并设置Exchange Server的地址和用户凭据。我们然后使用bind()方法获取需要撤回的邮件,并检查它是否已读。如果已读,则无法撤回。如果未读,则使用createForward()方法创建一个新邮件,并设置主题和正文。我们然后使用sendAndSaveCopy()方法发送撤回邮件,并调用delete()方法删除原邮件。

    需要注意的是,撤回邮件可能会失败或被接收者在读取之前已删除。在这种情况下,我们需要根据邮件回执来确定撤回的成功情况。

    1. 总结

    本文演示了如何使用Exchange协议在Java中实现撤回已发送的邮件功能。我们首先在Exchange Server中设置了一个测试环境,并使用Maven添加了exchange-web-services库的依赖项。我们然后演示了如何使用ExchangeService、EmailMessage等类实现邮件撤回功能。我们希望这篇文章对您有所帮助。

    展开全部

    评论
  • 妖王辣妹儿 2023-07-31 01:46
    关注

    该回答引用gpt
    以下为使用Exchange Web Services (EWS) API 撤回邮件的Java示例代码:

    import microsoft.exchange.webservices.data.core.ExchangeService;
    import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
    import microsoft.exchange.webservices.data.core.service.item.EmailMessage;
    import microsoft.exchange.webservices.data.property.complex.MessageBody;
    
    public class RevokeEmail {
    
        private static final String EXCHANGE_URL = "https://mail.domain.com/EWS/Exchange.asmx";
        private static final String USERNAME = "username";
        private static final String PASSWORD = "password";
        private static final String MESSAGE_ID = "AAMkAGE1NjNiNTU2LWEwZDktNDg1Yy04YjMwLTM4MmMyOTIyYjIxOABGAAAAAAC50dJEEQs6FqSsfO4VlLRWBwAxRkA1v3Ll3WxIfes7AP7eAAAAG0tnAAFk7AF3ER43jw+8fA/Zm1i0AAAgg0LUAAA=";
        private static final String RECALL_REASON = "This message was recalled";
    
        public static void main(String[] args) {
        
            try {
                ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
                service.setUrl(new java.net.URI(EXCHANGE_URL));
                service.setCredentials(new WebCredentials(USERNAME, PASSWORD));
    
                EmailMessage email = EmailMessage.bind(service, new ItemId(MESSAGE_ID));
                email.recall(RECALL_REASON, true);
                email.sendAndSaveCopy();
                
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    
    }
    
    

    请根据实际情况修改URL、用户名、密码和消息ID等信息。

    展开全部

    评论
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 8月7日
  • 创建了问题 7月31日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部