2016-04-21 6 views
1

Мне нужно реализовать следующую логику с помощью java.Необходимо открыть внешний вид ms с вложениями

-> Когда я нажимаю на кнопку, MS Outlook должен быть открыт с помощью To, CC, Subject и вложения.

Мы можем использовать mailto для этого, но мы не можем добавить вложение, если будем использовать mailto.

мне нужно добавить несколько вложений из общей папки в MS Outlook

Пожалуйста, помогите мне.

Использование переключился можно иметь единственную привязанность, но мне нужно, чтобы открыть перспективу с 2+ крепления и кнопку отправки должны быть доступны, так что пользователь может отправить почту

+1

Зачем использовать Outlook вообще? – Stefan

+0

http://stackoverflow.com/questions/248569/starting-outlook-and-having-an-email-pre-populated-from-command-line – jmehrens

+0

@stefan - пользовательский прогноз, поскольку он использует это – Thomas

ответ

1

Использование JavaMail для создания составного сообщения мим с вашим To, CC, Subject и приложение. Затем вместо переноса сообщения saveChanges и writeTo и сохраните его в файловой системе.

Существует переключатель undocumented/eml, который может использоваться для открытия стандартного формата MIME. Например, outlook /eml filename.eml Существует зарегистрированный /f переключатель, который откроет msg файлов. Например, outlook /f filename.msgx-unsent может использоваться для переключения кнопки отправки.

Вот пример, чтобы вы начали:

public static void main(String[] args) throws Exception { 
    //Create message envelope. 
    MimeMessage msg = new MimeMessage((Session) null); 
    msg.addFrom(InternetAddress.parse("[email protected]")); 
    msg.setRecipients(Message.RecipientType.TO, 
      InternetAddress.parse("[email protected]")); 
    msg.setRecipients(Message.RecipientType.CC, 
      InternetAddress.parse("[email protected]")); 
    msg.setSubject("Hello Outlook"); 
    //msg.setHeader("X-Unsent", "1"); 

    MimeMultipart mmp = new MimeMultipart(); 
    MimeBodyPart body = new MimeBodyPart(); 
    body.setDisposition(MimePart.INLINE); 
    body.setContent("This is the body", "text/plain"); 
    mmp.addBodyPart(body); 

    MimeBodyPart att = new MimeBodyPart(); 
    att.attachFile("c:\\path to file.attachment"); 
    mmp.addBodyPart(att); 

    msg.setContent(mmp); 
    msg.saveChanges(); 


    File resultEmail = File.createTempFile("test", ".eml"); 
    try (FileOutputStream fs = new FileOutputStream(resultEmail)) { 
     msg.writeTo(fs); 
     fs.flush(); 
     fs.getFD().sync(); 
    } 

    System.out.println(resultEmail.getCanonicalPath()); 

    ProcessBuilder pb = new ProcessBuilder(); 
    pb.command("cmd.exe", "/C", "start", "outlook.exe", 
      "/eml", resultEmail.getCanonicalPath()); 
    Process p = pb.start(); 
    try { 
     p.waitFor(); 
    } finally { 
     p.getErrorStream().close(); 
     p.getInputStream().close(); 
     p.getErrorStream().close(); 
     p.destroy(); 
    } 
} 

Вы должны обрабатывать очистку после того как клиент электронной почты закрыт.

Вам также необходимо подумать о последствиях безопасности сообщений электронной почты, оставленных в файловой системе.

+0

Не могли бы вы укажите пример кода – Thomas

+0

Только если вы пообещаете прочитать [JAVAMAIL API FAQ] (http://www.oracle.com/technetwork/java/faq-135477.html) и обновить свой JavaMail. Подпишите здесь: – jmehrens

+0

Благодарим вас за кусок кода. Но у меня есть более одного приложения за один раз – Thomas