Как открыть почтовую программу по умолчанию с субъектом и органом в кросс-платформенных образом?

голоса
11

Как открыть почтовую программу по умолчанию с субъектом и органом в кросс-платформенных образом?

К сожалению, это аа клиентского приложения написанного на Java, а не на сайте.

Я хотел бы, чтобы работать в кросс-платформенных способом (что означает Windows, и Mac, извините Linux). Я рад выполнить VBScript в Windows, или AppleScript в OS X. Но я понятия не имею, что эти сценарии должны содержать. Я хотел бы выполнить vs. программы пользователя по умолчанию только на поиск Outlook, или любой другой.

В OS X, я попытался выполнить команду:

open mailto:?subject=MySubject&body=TheBody

URL экранирование необходимо , чтобы заменить пробелы с %20.

Обновление ОС Windows, вы должны играть все виды игр , чтобы startправильно работать. Вот собственно Java заклинание:

class Win32 extends OS {
    public void email(String subject, String body) throws Exception {
        String cmd = cmd.exe /c start \\ \ + formatMailto(subject, body) + \;
        Runtime.getRuntime().exec(cmd);
    }
}
Задан 20/08/2008 в 04:20
источник пользователем
На других языках...                            


9 ответов

голоса
10

В Java 1.6 у вас есть способ Stardard , чтобы открыть почтовую программу по умолчанию платформы: метод Desktop.mail (URI) .Отель URI может быть использован для установки всех полой почты (отправитель, получатели, тело, субъект). Вы можете проверить полный пример рабочего стола интеграции в Java 1.6 на Использование API Desktop в Java SE 6

Ответил 26/08/2008 в 12:38
источник пользователем

голоса
4

startотлично работает в ОС Windows (см. ниже) Я хотел бы использовать Java встроенный в UrlEscape затем просто запустить вторую замену «+» символов.

start mailto:"?subject=My%20Subject&body=The%20Body"
Ответил 20/08/2008 в 05:53
источник пользователем

голоса
4

1. Добавить сюжетную линию

Вы можете предварительное заполнение строки темы в электронной почте, добавив объект предшествует « ? Subject = » после того , как адрес электронной почты.

Таким образом, ссылка теперь становится:

<a href="mailto:someone@yoursite.com?subject=Mail from Our Site">Email Us</a> 

2. Отправить нескольким получателям

Почта может быть отправлена ​​дополнительным получателям либо как углеродные копии (CC) или слепых копий углерода (ОЦК).

Это делается таким же образом, помещая « ?cc=someoneelse@theirsite.com » после того, как начальный адрес.

Таким образом, ссылка выглядит следующим образом:

<a href="mailto:someone@yoursite.com?cc=someoneelse@theirsite.com">Email Us</a>

куб.см может просто заменить ОЦК, если вы хотите отправить скрытую копию.

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

Конечно, Вы можете указать более одного дополнительного получателя, просто разделить список получателей с запятой.

<a href="mailto:someone@yoursite.com?cc=someoneelse@theirsite.com, another@thatsite.com, me@mysite.com">Email Us</a> 

Источники из Получения более от «MAILTO» , которые сейчас 404 - х. Я извлечь содержимое из waybackmachine.

3. Сочетание кода

Вы можете комбинировать различные биты кода выше, добавлением «&» между собой.

Таким образом, добавление

me@mysite.com?subject=Hello&cc=you@yoursite.com&bcc=her@hersite.com

будет отправить по электронной почте с темой «Hello» для меня, ты и ее.

4. Написать на e-mail

Вы также можете предварительное заполнение тела сообщения электронной почты с началом сообщения, или написать сообщение целиком , если вам нравится! Для того, чтобы добавить некоторые вещи в теле письма оно снова так же просто , как и выше - « тело =? После того, как адрес электронной почты». Однако форматирование , что электронная почта может быть немного сложнее. Для того, чтобы создать пробелы между словами , вам придется использовать шестнадцатеричный код - например , « % 20 » между каждым словом, и для создания новых линий будет означать добавление « % 0D ». Подобным же образом символы , такие как $ знаки должны быть написаны в шестнадцатеричном коде.

Если вы хотите добавить строку темы и отправить копии нескольким получателям, это может сделать для очень долго и трудно написать немного кода.

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

Просто посмотрите на код!

<a href="mailto:abbeyvet@outfront.net?CC=spooky@outfront.net
&BCC=thomasbrunt@outfront.net&Subject=Please%2C%20I%20insist
%21&Body=Hi%0DI%20would%20like%20to%20send%20you%20
%241000000%20to%20divide%20as%20you%20see%20fit%20among
%20yourselves%20and%20all%20the%20moderators.%0DPlease%
20let%20me%20know%20to%20whom%20I%20should%20send
%20the%20check.">this link</a> 

Примечание: Исходный URL , где я нашел это теперь 404ing , поэтому я схватил к содержанию от waybackmachine и разместил его здесь , так что не заблудитесь. Кроме того , ОП заявил , что он не был на сайт, который является то , что эти примеры, но некоторые из этих методов все еще могут быть полезными.

Ответил 20/08/2008 в 04:42
источник пользователем

голоса
3

Никогда не используйте Runtime.exec(String)на Mac OS X или любой другой операционной системы. Если вы сделаете это, вы должны выяснить , как правильно цитировать все строки аргументов и так далее; это боль и очень подвержены ошибкам.

Вместо этого, используйте Runtime.exec(String[])который принимает массив уже разделенных аргументов. Это гораздо больше подходит практически для всех видов применения.

Ответил 26/08/2008 в 04:34
источник пользователем

голоса
3

Я не знаю , если Java имеет некоторые встроенные в метод urlencoding строку, но эта ссылка http://www.permadi.com/tutorial/urlEncoding/ показывает некоторые из наиболее распространенных символов для кодирования:

Для процентов кодирования MAILTO URI hnames и hvalues, я использую правила на http://shadow2531.com/opera/testcases/mailto/modern_mailto_uri_scheme.html#encoding . Под http://shadow2531.com/opera/testcases/mailto/modern_mailto_uri_scheme.html#implementations , есть пример Java , который может помочь.

В основном, я использую:

private String encodex(final String s) {
    try {
        return java.net.URLEncoder.encode(s, "utf-8").replaceAll("\\+", "%20").replaceAll("\\%0A", "%0D%0A");
    } catch (Throwable x) {
        return s;
    }
}

Строка, передаваемая в должна быть строка с \ г \ п, и паразитной \ г уже нормированной к \ п.

Также обратите внимание, что только возвращение исходную строку на исключение, как выше только безопасно, если MAILTO URI аргумент вы передаете в командной строке правильно спасся и в кавычках.

На окнах, что означает:

  1. Quote аргумент.
  2. Побег любой "внутри кавычек с \.
  3. Побег любой \ которые предшествуют "или конец строки с \.

Кроме того, на окнах, если вы имеете дело с UTF-16 строк, как в Java, вы можете захотеть использовать ShellExecuteW «открыть» MAILTO URI. Если вы этого не сделаете, и вернуться с на исключение (где некоторые hvalue не полностью процентов кодированный, вы могли бы в конечном итоге сужение некоторых широких символов и потери информации. Но, не все почтовые клиенты принимают аргументы Юникода, так что в идеале, вы хотите передать правильно процентов в кодировке utf8-ASCII спор с ShellExecute.

Как «старт», ShellExecute с «открытым» должен открыть MailTo URI в клиенте по умолчанию.

Не уверен, что о других ОС.

Ответил 20/08/2008 в 08:51
источник пользователем

голоса
3

Я должен был повторно реализовать UrlEncode, поскольку в Java будет использовать + для пространства и почты взяли те, в буквальном смысле.

Я не знаю , если Java имеет некоторые встроенные в метод urlencoding строку, но эта ссылка http://www.permadi.com/tutorial/urlEncoding/ показывает некоторые из наиболее распространенных символов для кодирования:

;       %3B
?       %3F
/       %2F
:       %3A
#       %23
&       %24
=       %3D
+       %2B
$       %26
,       %2C
space   %20 or +
%       %25
<       %3C
>       %3E
~       %7E
%       %25
Ответил 20/08/2008 в 05:03
источник пользователем

голоса
2

Mailto не плохой путь к идти. Но, как вы сказали, вы должны убедиться, что он правильно закодирован.

Основная проблема с использованием MAILTO является с ломающихся линий. Используйте% 0A для возврата каретки,% 20 для пространств.

Кроме того , имейте в виду , что MAILTO считается таким же , как URL сортов и , следовательно , будет иметь те же ограничения на длину. См http://support.microsoft.com/kb/208427 , обратите внимание на максимальную длину URL из 2083 символов. Это подтверждается для MAILTO, а в этой статье: http://support.microsoft.com/kb/279460/en-us . Кроме того , некоторые почтовые клиенты могут также иметь предел (я считаю , более старые версии Outlook Express был предел чего - то гораздо меньше , как 483 символов или что - то. Если вы планируете иметь более длинную строку , чем тогда вы должны смотреть на альтернативы ,

Кстати, вы не должны прибегать к выгоняя скрипт, чтобы сделать это до тех пор, как вы можете раскошеливаться команду из Java (я, если вы можете, так как я не делаю Java не знаю).

Ответил 20/08/2008 в 04:30
источник пользователем

голоса
1

Вы можете использовать это ...

main(string[] args){    
String forUri = String.format("mailto:?subject=%s&body=%s",  urlEncode(sub), urlEncode(mailBody));
                        Desktop.getDesktop().mail(new URI(forUri));
}

private static final String urlEncode(String str) {
        try {
            return URLEncoder.encode(str, "UTF-8").replace("+", "%20");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
    }

Кроме того, для форматирования чтения Простого способа отправки сообщений электронной почты в Java: почта к ссылкам

Ответил 24/08/2012 в 11:02
источник пользователем

голоса
0

Я реализовал это, и это хорошо работает на OS X. (Упоминание Райана от максимальной длины URL не кодифицированы.)

public void email(String subject, String body) throws Exception {
    String cmd = "open mailto:";        
    cmd += "?subject=" + urlEncode(subject);
    cmd += "&body=" + urlEncode(body);
    Runtime.getRuntime().exec(cmd);
}

private static String urlEncode(String s) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < s.length(); i++) {
        char ch = s.charAt(i);
        if (Character.isLetterOrDigit(ch)) {
            sb.append(ch);
        }
        else {
            sb.append(String.format("%%%02X", (int)ch));
        }
    }
    return sb.toString();
}

Я должен был повторно реализовать UrlEncode , поскольку в Java будет использовать +для пространства и почты взяли те , в буквальном смысле. Не протестирована на Windows , тем не менее.

Ответил 20/08/2008 в 04:56
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more