Отправка и пересылка сообщений — Отправка сообщений Outlook с помощью программы на Java
Этот SmtpClient класс позволяет приложениям отправлять письма, используя протокол простой передачи почты (SMTP).
- Этот SmtpClient класс является единственной основной точкой входа, которую разработчики используют для отправки писем.
- Этот SmtpClient класс также предоставляет другие распространённые методы доставки электронной почты, включая запись сообщений в файловую систему, очередь сообщений и т.д.
- Этот SmtpClient класс полностью поддерживает эти две модели программирования:
- Этот SmtpClient класс также поддерживает отправка сообщений в формате TNEF
Чтобы отправить сообщение электронной почты и блокировать выполнение, ожидая его передачи на SMTP‑сервер, используйте один из синхронных методов Send. Чтобы позволить основному потоку вашей программы продолжать работу во время передачи письма, используйте beginSend метод.
Отправка писем синхронно
Сообщение электронной почты можно отправить синхронно с помощью SmtpClient класс отправить метод. Он отправляет указанное сообщение электронной почты через SMTP‑сервер для доставки. Отправитель, получатели, тема и тело сообщения задаются объектами String. Чтобы отправить сообщение синхронно, выполните следующие шаги:
- Создайте экземпляр MailMessage класс и задайте его свойства.
- Создайте экземпляр SmtpClient класс и укажите хост, порт, имя пользователя и пароль.
- Отправьте сообщение с помощью SmtpClient класс отправить метод и передайте MailMessage экземпляр.
Следующий фрагмент кода на Java показывает, как отправлять письма Outlook синхронно.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Declare msg as MailMessage instance
MailMessage msg = new MailMessage();
// Create an instance of SmtpClient class
SmtpClient client = new SmtpClient();
// Specify your mailing host server, Username, Password, Port # and Security option
client.setHost("mail.server.com");
client.setUsername("username");
client.setPassword("password");
client.setPort(587);
client.setSecurityOptions(SecurityOptions.SSLExplicit);
try {
// Client.Send will send this message
client.send(msg);
System.out.println("Message sent");
} catch (Exception ex) {
System.err.println(ex);
}
Отправка писем асинхронно
Иногда вы можете захотеть отправлять почту асинхронно. Например, если вы отправляете большое количество писем через ваше приложение, синхронный подход может не сработать. В такой ситуации можно использовать beginSend. Это beginSend метод SmtpClient класс отправляет сообщение электронной почты на SMTP‑сервер для доставки. Этот метод не блокирует вызывающий поток и позволяет передать объект в метод, который будет вызван после завершения операции. Чтобы отправить сообщение Outlook асинхронно в Java, выполните следующие шаги:
- Создайте экземпляр MailMessage класс и используйте его разные свойства.
- Создайте экземпляр SmtpClient класс и укажите хост, порт, имя пользователя и пароль.
- Создайте пользовательский экземпляр, который будет передан в метод и вызван после завершения асинхронной операции.
- Отправьте сообщение с помощью beginSend метод SmtpClient класс и передайте MailMessage экземпляр и пользовательский экземпляр в нём вместе с функцией обратного вызова, которая будет вызвана после завершения операции.
Чтобы получить уведомление о том, что письмо отправлено или операция отменена, передайте функцию обратного вызова в beginSend метод вызывается. После вызова SmtpClient класс beginSend метод, когда не требуется ждать полного отправления сообщения электронной почты. Мы можем вызвать другой метод beginSend одновременно. Когда письмо было отправлено с помощью beginSend метод, фрагмент кода выводит сообщение ("Message Sent"). Ниже представлена Java‑программа или фрагмент кода, показывающий, как отправлять письма асинхронно.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
public static void run() {
sendMail();
}
static SmtpClient getSmtpClient() {
SmtpClient client = new SmtpClient();
client.setHost("mail.server.com");
// Specify your mail Username, Password, Port # and security option
client.setUsername("username");
client.setPassword("password");
client.setPort(587);
client.setSecurityOptions(SecurityOptions.SSLExplicit);
return client;
}
static void sendMail() {
try {
// Declare msg as MailMessage instance
MailMessage msg = new MailMessage("sender@gmail.com", "receiver@gmail.com", "Test subject", "Test body");
SmtpClient client = getSmtpClient();
Object state = new Object();
IAsyncResult ar = client.beginSend(msg, callback, state);
// If the user canceled the send, and mail hasn't been sent yet,
client.cancelAsyncOperation(ar);
msg.dispose();
System.out.println("Goodbye.");
} catch (Exception ex) {
System.err.println(ex);
}
}
static AsyncCallback callback = new AsyncCallback() {
public void invoke(IAsyncResult ar) {
IAsyncResultExt task = null;
if (ar instanceof IAsyncResult)
task = (IAsyncResultExt) ar;
if (task != null && task.isCanceled()) {
System.out.println("Send canceled.");
}
if (task != null && task.getErrorInfo() != null) {
System.out.println(task.getErrorInfo());
} else {
System.out.println("Message Sent.");
}
}
};
Отправка сохранённых сообщений с диска
Файлы EML (файлы электронной почты Outlook Express) содержат заголовок письма, тело сообщения и любые вложения. Aspose.Email позволяет разработчикам работать с файлами EML различными способами. В этой статье показано, как загрузить файлы EML с диска и отправить их как письма через SMTP. Вы можете загрузить .eml файлы с диска или потока в MailMessage класс и отправьте сообщение, используя SmtpClient класс. The MailMessage класс — основной класс для создания новых сообщений электронной почты, загрузки файлов сообщений с диска или потока и сохранения сообщений. Следующий фрагмент кода Java показывает, как отправить сохранённые сообщения с диска.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Load an EML file in MailMessage class
MailMessage message = MailMessage.load(dataDir + "test.eml");
// Send this message using SmtpClient
SmtpClient client = new SmtpClient("host", "username", "password");
try {
client.send(message);
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
Отправка простого текстового письма
Ниже приведённые примеры программ показывают, как отправить простое текстовое письмо. Тело свойство, свойство MailMessage класс, используется для указания текстового содержания тела сообщения. Чтобы отправить простое текстовое письмо, выполните следующие шаги:
- Создать экземпляр MailMessage класс.
- Укажите адреса отправителя и получателя в MailMessage экземпляр.
- Укажите Тело содержание, используемое для текстового сообщения.
- Создать экземпляр SmtpClient класс и отправьте письмо.
Следующий фрагмент кода показывает, как отправить простое текстовое письмо.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of the MailMessage class
MailMessage message = new MailMessage();
// Set From field, To field and Plain text body
message.setFrom(MailAddress.to_MailAddress("sender@sender.com"));
message.getTo().add("receiver@receiver.com");
message.setBody("This is Plain Text Body");
// Create an instance of the SmtpClient class
SmtpClient client = new SmtpClient();
// And Specify your mailing host server, Username, Password and Port
client.setHost("smtp.server.com");
client.setUsername("Username");
client.setPassword("Password");
client.setPort(25);
try {
// Client.Send will send this message
client.send(message);
System.out.println("Message sent");
} catch (Exception ex) {
System.err.println(ex);
}
Отправка письма с HTML‑тело
Ниже приведённые примеры программ показывают, как можно отправить простое HTML‑сообщение. HtmlBody, свойство MailMessage класс, используется для указания HTML‑содержимого тела сообщения. Чтобы отправить простое HTML‑письмо, выполните следующие шаги:
- Создать экземпляр MailMessage класс.
- Укажите адреса отправителя и получателя в MailMessage экземпляр.
- Укажите HtmlBody содержание.
- Создать экземпляр SmtpClient класс и отправьте письмо, используя отправить метод.
Для целей этой статьи HTML‑содержание письма простое:
This is the HTML body. Большинство HTML‑писем будет более сложными. Следующий фрагмент Java‑программы показывает, как отправить письмо с HTML‑тело.public static void run() {
// Declare msg as MailMessage instance
MailMessage msg = new MailMessage();
// Use MailMessage properties like specify sender, recipient, message and HtmlBody
msg.setFrom(MailAddress.to_MailAddress("newcustomeronnet@gmail.com"));
msg.setTo(MailAddressCollection.to_MailAddressCollection("asposetest123@gmail.com"));
msg.setSubject("Test subject");
msg.setHtmlBody("<html><body>This is the HTML body</body></html>");
SmtpClient client = getSmtpClient();
try {
// Client will send this message
client.send(msg);
System.out.println("Message sent");
} catch (Exception ex) {
System.err.println(ex);
}
System.out.println("Email sent with HTML body.");
}
private static SmtpClient getSmtpClient() {
SmtpClient client = new SmtpClient("smtp.gmail.com", 587, "your.email@gmail.com", "your.password");
client.setSecurityOptions(SecurityOptions.Auto);
return client;
}
Отправка письма с альтернативным текстом сообщения
Ниже приведённые примеры программ показывают, как отправить простое HTML‑сообщение с альтернативным содержимым. Используйте AlternateView класс для указания копий сообщения электронной почты в разных форматах. Например, если вы отправляете сообщение в формате HTML, вы также можете предоставить текстовую версию для получателей, использующих почтовые клиенты, не поддерживающие HTML. Или, если вы рассылаете новостную рассылку, вы можете предоставить текстовую копию для получателей, выбравших текстовый вариант. Чтобы отправить письмо с альтернативным текстом, выполните следующие шаги:
- Создать экземпляр MailMessage класс.
- Укажите адреса отправителя и получателя в MailMessage экземпляр.
- Создать экземпляр AlternateView класс.
Это создаёт альтернативный вид сообщения электронной почты, используя содержимое, указанное в строке.
- Добавьте экземпляр AlternateView класс к MailMessage объекта.
- Создать экземпляр SmtpClient класс и отправьте письмо, используя отправить метод.
Следующий фрагмент кода показывает, как отправить письмо с альтернативным текстом.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Declare message as MailMessage instance
MailMessage message = new MailMessage();
// Creates AlternateView to view an email message using the content specified in the //String
AlternateView alternate = AlternateView.createAlternateViewFromString("Alternate Text");
// Adding alternate text
message.getAlternateViews().addItem(alternate);
Массовая отправка писем
Массовая отправка писем подразумевает отправку группы писем в одном сообщении. Мы можем отправить партию писем, используя SmtpClient класс отправить перегрузка метода, принимающая MailMessageCollection класс:
- Создайте экземпляр SmtpClient класс.
- Укажите SmtpClient свойств класса.
- Создать экземпляр MailMessage класс.
- Укажите отправителя, получателя, тему письма и сообщение в экземпляре MailMessage класс.
- Повторите вышеуказанные два шага, если хотите отправить письмо другому получателю.
- Создайте экземпляр MailMessageCollection класс.
- Добавьте экземпляр MailMessage класс в объекте MailMessageCollection класс.
- Теперь отправьте ваше письмо, используя SmtpClient класс отправить метод, передавая экземпляр MailMessageCollection класс в нём.
Следующий фрагмент кода показывает, как отправить массовую рассылку писем.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create SmtpClient as client and specify server, port, user name and password
SmtpClient client = new SmtpClient("mail.server.com", 25, "Username", "Password");
// Create instances of MailMessage class and Specify To, From, Subject and Message
MailMessage message1 = new MailMessage("msg1@from.com", "msg1@to.com", "Subject1", "message1, how are you?");
MailMessage message2 = new MailMessage("msg1@from.com", "msg2@to.com", "Subject2", "message2, how are you?");
MailMessage message3 = new MailMessage("msg1@from.com", "msg3@to.com", "Subject3", "message3, how are you?");
// Create an instance of MailMessageCollection class
MailMessageCollection manyMsg = new MailMessageCollection();
manyMsg.addItem(message1);
manyMsg.addItem(message2);
manyMsg.addItem(message3);
// Use client.BulkSend function to complete the bulk send task
try {
// Send Message using BulkSend method
client.send(manyMsg);
System.out.println("Message sent");
} catch (Exception ex) {
System.err.println(ex);
}
Получить информацию о массово отправленных сообщениях
При массовой отправке сообщений вы можете получить информацию о количестве успешно отправленных сообщений и список этих сообщений. SucceededSending событие используется для этой цели.
Ниже приведён пример кода, показывающий, как получить информацию о количестве успешно отправленных сообщений:
try (SmtpClient client = new SmtpClient(host, SecurityOptions.Auto)) {
final AtomicInteger messageCount = new AtomicInteger(0);
client.setSucceededSending(new EventHandler<MailMessageEventArgs>() {
public void invoke(Object sender, MailMessageEventArgs eventArgs) {
System.out.println("The message " + eventArgs.getMessage().getSubject() + " was successfully sent.");
messageCount.incrementAndGet();
}
});
client.send(messages);
System.out.println(messageCount + " messages were successfully sent.");
}
Отправка писем с MultiConnection
SmtpClient предоставляет UseMultiConnection Свойство, которое может использоваться для создания нескольких соединений при тяжёлых операциях. Вы также можете задать количество соединений, используемых в режиме мультисоединения, используя SmtpClient.ConnectionsQuantity. Следующий фрагмент кода демонстрирует использование режима мультисоединения для отправки нескольких сообщений.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
SmtpClient smtpClient = new SmtpClient();
smtpClient.setHost("<HOST>");
smtpClient.setUsername("<USERNAME>");
smtpClient.setPassword("<PASSWORD>");
smtpClient.setPort(587);
smtpClient.setSupportedEncryption(EncryptionProtocols.Tls);
smtpClient.setSecurityOptions(SecurityOptions.SSLExplicit);
List<MailMessage> messages = new ArrayList<MailMessage>();
for (int i = 0; i < 20; i++) {
MailMessage message = new MailMessage("<EMAIL ADDRESS>", "<EMAIL ADDRESS>", "Test Message - " + UUID.randomUUID().toString(),
"SMTP Send Messages with MultiConnection");
messages.add(message);
}
smtpClient.setConnectionsQuantity(5);
smtpClient.setUseMultiConnection(MultiConnectionMode.Enable);
smtpClient.send(messages);
Отправка сообщения в формате TNEF
Письма TNEF имеют специальное форматирование, которое может быть потеряно при отправке с использованием стандартного API. Aspose.Email предоставляет возможность отправлять письма в формате TNEF, тем самым сохраняя формат. The SmtpClient класс UseTnef свойство можно установить, чтобы отправлять письмо в формате TNEF. Следующий фрагмент кода показывает, как отправить сообщение в формате TNEF.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
String emlFileName = dataDir + "Message.eml"; // A TNEF Email
// Load from eml
MailMessage eml1 = MailMessage.load(emlFileName, new EmlLoadOptions());
eml1.setFrom(MailAddress.to_MailAddress("somename@gmail.com"));
eml1.getTo().clear();
eml1.getTo().addItem(new MailAddress("first.last@test.com"));
eml1.setSubject("With PreserveTnef flag during loading");
eml1.setDate(new Date());
SmtpClient client = new SmtpClient("smtp.gmail.com", 587, "somename", "password");
client.setSecurityOptions(SecurityOptions.Auto);
client.setUseTnef(true); // Use this flag to send as TNEF
client.send(eml1);
Отправка запросов на встречу
Microsoft Outlook предлагает функции календаря, а также управление электронной почтой. Когда пользователь открывает письмо с приглашением на событие, Outlook предлагает принять или отклонить приглашение. Aspose.Email позволяет разработчикам добавлять функции календаря в ваши письма.
Отправка запросов по электронной почте
Чтобы отправить запросы встреч по электронной почте, выполните следующие шаги:
- Создать экземпляр MailMessage класс.
- Укажите адреса отправителя и получателя, используя экземпляр MailMessage класс.
- Инициализируйте экземпляр Appointment класс и передайте его значения.
- Укажите краткое описание и описание в Calendar экземпляр.
- Добавьте Calendar) к MailMessage экземпляр и передайте ему Appointment экземпляр.
|Запрос встречи iCalendar, отправленный по электронной почте| | :- | |
| Следующий фрагмент кода показывает, как отправлять запросы по электронной почте.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of the MailMessage class
MailMessage msg = new MailMessage();
// Set the sender, recipient, who will receive the meeting request. Basically, the recipient is the same as the meeting attendees
msg.setFrom(MailAddress.to_MailAddress("newcustomeronnet@gmail.com"));
msg.setTo(MailAddressCollection.to_MailAddressCollection("person1@domain.com, person2@domain.com, person3@domain.com, asposetest123@gmail.com"));
// Create Appointment instance
Calendar cal = Calendar.getInstance();
cal.set(2015, Calendar.JULY, 17, 13, 0, 0);
Date startDate = cal.getTime();
cal.set(2015, Calendar.JULY, 17, 14, 0, 0);
Date endDate = cal.getTime();
Appointment app = new Appointment("Room 112", startDate, endDate, msg.getFrom(), msg.getTo());
app.setSummary("Release Meetting");
app.setDescription("Discuss for the next release");
// Add appointment to the message and Create an instance of SmtpClient class
msg.addAlternateView(app.requestApointment());
SmtpClient client = getSmtpClient();
try {
// Client.Send will send this message
client.send(msg);
System.out.println("Message sent");
} catch (Exception ex) {
System.err.println(ex);
}
Поддержка iCalendar для IBM Lotus Notes
Функция календаря Aspose.Email основана на стандарте iCalendar, стандарте обмена данными календаря (RFC 2445 или ссылка на синтаксис RFC2445). Поэтому она поддерживает не только Microsoft Outlook, но и IBM Lotus Notes. Чтобы отправить запрос встречи в Lotus Notes, выполните те же шаги, что описаны выше.
Переслать письмо с помощью SMTP‑клиента
Пересылка письма с помощью SMTP‑клиента
Пересылка письма — обычная практика в повседневной цифровой коммуникации. Полученное письмо можно переслать конкретным получателям без передачи оригинальному отправителю. Aspose.Email API SmtpClient предоставляет возможность пересылать письмо конкретным получателям. Его Переслать метод можно использовать для пересылки полученного или сохранённого письма нужным получателям, как показано в этой статье. Следующий фрагмент кода показывает, как переслать письмо с помощью SMTP‑клиента.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of SmtpClient class
SmtpClient client = new SmtpClient();
// Specify your mailing host server, Username, Password, Port and SecurityOptions
client.setHost("mail.server.com");
client.setUsername("username");
client.setPassword("password");
client.setPort(587);
client.setSecurityOptions(SecurityOptions.SSLExplicit);
MailMessage message = MailMessage.load(dataDir + "Message.eml");
client.forward("Recipient1@domain.com", "Recipient2@domain.com", message);
Пересылка письма без использования MailMessage
API также поддерживает пересылку сообщений EML без предварительной загрузки в MailMessage. Это полезно в случаях, когда ресурсы системы ограничены, например, память.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
String host = "mail.server.com";
String username = "username";
String password = "password";
int smtpPort = 587;
String sender = "Sender@domain.com";
MailAddressCollection recipients = new MailAddressCollection();
recipients.add("recepient1@domain.com, recepient2@domain.com");
try (SmtpClient client = new SmtpClient(host, smtpPort, username, password, SecurityOptions.Auto)) {
String fileName = "test.eml";
try (FileInputStream fs = new FileInputStream(new File(dataDir + fileName))) {
client.forward(sender, recipients, fs);
}
}
Выполнение слияния писем
Слияние писем помогает создавать и отправлять партию схожих электронных сообщений. Основное содержание писем одинаково, но контент может быть персонализирован. Обычно данные получателя (имя, фамилия, компания и т.п.) используются для персонализации письма.
|Иллюстрация того, как работает слияние почты:| | :- | |
| Aspose.Email позволяет разработчикам настраивать слияния почты, включающие данные из различных источников данных.
Чтобы выполнить слияние писем с Aspose.Email, выполните следующие шаги:
- Создайте функцию с сигнатурой имени
- Создать экземпляр MailMessage класс.
- Укажите отправителя, получателя, тему и тело сообщения.
- Создайте подпись для конца письма.
- Создать экземпляр TemplateEngine классе и передайте её MailMessage экземпляр.
- Возьмите подпись в TemplateEngine экземпляр.
- Создать экземпляр DataTable класс.
- Добавьте столбцы Receipt, FirstName и LastName в качестве источников данных в DataTable класс.
- Создать экземпляр DataRow класс.
- Укажите адрес получателя, имя и фамилию в DataRow объекта.
- Создать экземпляр MailMessageCollection класс
- Укажите TemplateEngine и DataTable экземпляры в MailMessageCollection экземпляр.
- Создать экземпляр SmtpClient класс и укажите сервер, порт, имя пользователя и пароль.
- Отправляйте письма, используя SmtpClient класс отправить метод.
В примере ниже #FirstName# указывает на DataTable столбец, значение которого устанавливается пользователем. Следующий фрагмент кода показывает, как выполнить слияние почты.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
public static void run() {
// The path to the File directory.
String dstEmail = dataDir + "EmbeddedImage.msg";
// Create a new MailMessage instance
MailMessage msg = new MailMessage();
// Add subject and from address
msg.setSubject("Hello, #FirstName#");
msg.setFrom(MailAddress.to_MailAddress("sender@sender.com"));
// Add email address to send email also Add mesage field to HTML body
msg.getTo().add("your.email@gmail.com");
String htmlBody = "Your message here/r/n" + "Thank you for your interest in <STRONG>Aspose.Email</STRONG>.";
// Use GetSignment as the template routine, which will provide the same signature
htmlBody += "<br><br>Have fun with it.<br><br>#GetSignature()#";
msg.setHtmlBody(htmlBody);
// Create a new TemplateEngine with the MSG message, Register GetSignature routine. It will be used in MSG.
TemplateEngine engine = new TemplateEngine(msg);
engine.registerRoutine("GetSignature", new TemplateRoutine() {
public Object invoke(Object[] args) {
return getSignature(args);
}
});
// Create an instance of DataTable and Fill a DataTable as data source
DataTable dt = new DataTable();
dt.getColumns().add("Receipt");
dt.getColumns().add("FirstName");
dt.getColumns().add("LastName");
DataRow dr;
dr = dt.newRow();
dr.set("Receipt", "Nancy<Nancy@somedomain.com>");
dr.set("FirstName", "Nancy");
dr.set("LastName", "Doe");
dt.getRows().add(dr);
dr = dt.newRow();
dr.set("Receipt", "Andrew<Andrew@somedomain.com>");
dr.set("FirstName", "Andrew");
dr.set("LastName", "Doe");
dt.getRows().add(dr);
dr = dt.newRow();
dr.set("Receipt", "Janet<Janet@somedomain.com>");
dr.set("FirstName", "Janet");
dr.set("LastName", "Doe");
dt.getRows().add(dr);
MailMessageCollection messages;
try {
// Create messages from the message and datasource.
messages = engine.instantiate(dt);
// Create an instance of SmtpClient and specify server, port, username and password
SmtpClient client = new SmtpClient("smtp.gmail.com", 587, "your.email@gmail.com", "your.password");
client.setSecurityOptions(SecurityOptions.Auto);
// Send messages in bulk
client.send(messages);
} catch (MailException ex) {
System.err.println(ex);
}
catch (SmtpException ex) {
System.err.println(ex);
}
System.out.println("Message sent after performing mail merge.");
}
// Template routine to provide signature
static Object getSignature(Object[] args) {
return "Aspose.Email Team<br>Aspose Ltd.<br>" + new Date().toString();
}
Выполнение построчного слияния почты
Пользователь также может объединять отдельные строки данных, чтобы получить полную и готовую MailMessage объект. The TemplateEngine.merge метод можно использовать для выполнения пошагового слияния почты.
// Create message from the data in current row.
MailMessage message = engine.merge(currentRow);