Skip to content

Commit 1f746fb

Browse files
committed
release 1.0.4
1 parent 8ead4dc commit 1f746fb

File tree

9 files changed

+136
-8
lines changed

9 files changed

+136
-8
lines changed

CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ All _notable_ changes to this project will be documented in this file.
55
The format is based on _[Keep a Changelog][keepachangelog]_, and this project
66
adheres to _[Semantic Versioning][semver]_.
77

8+
## [1.0.4] (released: 2022-10-10)
9+
### Added
10+
- add FormData attachment support.
11+
- add default AsyncClient.
812

913
## [1.0.3] (released: 2022-09-23)
1014
### Added
@@ -34,6 +38,8 @@ adheres to _[Semantic Versioning][semver]_.
3438
- Add Import a list of bounces from CSV file API
3539

3640

41+
[1.0.4]: https://github.com/mailgun/mailgun-java/compare/release/1.0.3...release/1.0.4
42+
[1.0.3]: https://github.com/mailgun/mailgun-java/compare/release/1.0.2...release/1.0.3
3743
[1.0.2]: https://github.com/mailgun/mailgun-java/compare/release/1.0.1...release/1.0.2
3844
[1.0.1]: https://github.com/mailgun/mailgun-java/compare/release/1.0.0...release/1.0.1
3945

README.md

+56-4
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ Add the following to your `pom.xml`:
8585
Gradle Groovy DSL .
8686

8787
```xml
88-
implementation 'com.mailgun:mailgun-java:1.0.2'
88+
implementation 'com.mailgun:mailgun-java:1.0.4'
8989
```
9090

9191

@@ -253,10 +253,13 @@ More information:
253253
- [Methods](#methods)
254254
- [Messages](#messages)
255255
- [Set up MailgunMessagesApi](#Set-up-MailgunMessagesApi)
256-
- [Send email(s)](#send-emails)
256+
- [Send email](#send-email)
257+
- [Send email(name with email)](#send-email-name-with-email)
258+
- [Send emails](#send-emails)
257259
- [Async send email(s)](#async-send-emails)
258260
- [Send email (html example)](#send-email-html-example)
259261
- [Send email (attachments example)](#send-email-attachments-example)
262+
- [Send email (attachment FormData example)](#send-email-attachment-FormData-example)
260263
- [Send email (inline multiple files example)](#send-email-inline-multiple-files-example)
261264
- [Send email (delay example)](#send-email-delay-example)
262265
- [Send email (reply-to example)](#send-email-reply-to-example)
@@ -433,11 +436,47 @@ When you submit messages for delivery, Mailgun places them in a message queue.
433436
```
434437

435438

439+
#### Send email
440+
```java
441+
Message message = Message.builder()
442+
.from(EMAIL_FROM)
443+
.to(USER_EMAIL)
444+
.subject(SUBJECT)
445+
.text(TEXT)
446+
.build();
447+
448+
MessageResponse messageResponse = mailgunMessagesApi.sendMessage(DOMAIN, message);
449+
```
450+
451+
#### Send email (name with email)
452+
```java
453+
Message message = Message.builder()
454+
.from(EMAIL_FROM)
455+
.to(EmailUtil.nameWithEmail(USER_NAME, USER_EMAIL))
456+
.subject(SUBJECT)
457+
.text(TEXT)
458+
.build();
459+
460+
MessageResponse messageResponse = mailgunMessagesApi.sendMessage(DOMAIN, message);
461+
```
462+
436463
#### Send email(s)
437464
```java
438465
Message message = Message.builder()
439466
.from(EMAIL_FROM)
440-
.to(EmailUtil.emailWithName(USER_NAME, USER_EMAIL)
467+
.to(Arrays.asList(USER_EMAIL_1, USER_EMAIL_2))
468+
.subject(SUBJECT)
469+
.text(TEXT)
470+
.build();
471+
472+
MessageResponse messageResponse = mailgunMessagesApi.sendMessage(DOMAIN, message);
473+
```
474+
or
475+
```java
476+
Message message = Message.builder()
477+
.from(EMAIL_FROM)
478+
.to(USER_EMAIL_1)
479+
.to(USER_EMAIL_2)
441480
.subject(SUBJECT)
442481
.text(TEXT)
443482
.build();
@@ -453,7 +492,7 @@ Asynchronously send email(s).
453492

454493
Message message = Message.builder()
455494
.from(EMAIL_FROM)
456-
.to(EmailUtil.emailWithName(USER_NAME, USER_EMAIL)
495+
.to(USER_EMAIL)
457496
.subject(SUBJECT)
458497
.text(TEXT)
459498
.build();
@@ -494,6 +533,19 @@ Asynchronously send email(s).
494533
MessageResponse messageResponse = mailgunMessagesApi.sendMessage(DOMAIN, message);
495534
```
496535

536+
#### Send email (attachment FormData example)
537+
```java
538+
Message message = Message.builder()
539+
.from(EMAIL_FROM)
540+
.to(EMAIL_TO)
541+
.subject(SUBJECT)
542+
.text(TEXT)
543+
.formData(new FormData("image/png", "filename.png", myDataAsByteArray))
544+
.build();
545+
546+
MessageResponse messageResponse = mailgunMessagesApi.sendMessage(DOMAIN, message);
547+
```
548+
497549
#### Send email (inline multiple files example)
498550
```java
499551
Message message = Message.builder()

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.mailgun</groupId>
88
<artifactId>mailgun-java</artifactId>
9-
<version>1.0.4-SNAPSHOT</version>
9+
<version>1.0.4</version>
1010
<packaging>jar</packaging>
1111

1212
<name>${project.groupId}:${project.artifactId}</name>

src/main/java/com/mailgun/client/MailgunClient.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.mailgun.client;
22

3+
import java.util.concurrent.Executors;
4+
35
import com.fasterxml.jackson.databind.ObjectMapper;
46
import com.mailgun.api.MailgunApi;
57
import com.mailgun.util.ConsoleLogger;
68
import com.mailgun.util.MailgunApiUtil;
79
import com.mailgun.util.ObjectMapperUtil;
810
import feign.AsyncClient;
911
import feign.AsyncFeign;
12+
import feign.Client;
1013
import feign.Feign;
1114
import feign.Logger;
1215
import feign.Request;
@@ -68,7 +71,10 @@ public static class MailgunClientBuilder {
6871
private Logger logger = new ConsoleLogger();
6972
private ErrorDecoder errorDecoder = new ErrorDecoder.Default();
7073
private Request.Options options = new Request.Options();
71-
private AsyncClient<Object> client = null;
74+
private AsyncClient<Object> client = new AsyncClient.Default<>(
75+
new Client.Default(null, null),
76+
Executors.newSingleThreadExecutor()
77+
);
7278

7379
private String baseUrl = DEFAULT_BASE_URL_US_REGION;
7480
private final String apiKey;

src/main/java/com/mailgun/model/message/Message.java

+14
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.mailgun.util.CollectionUtil;
66
import com.mailgun.util.DateTimeUtil;
77
import com.mailgun.util.StringUtil;
8+
import feign.form.FormData;
89
import feign.form.FormProperty;
910
import lombok.Builder;
1011
import lombok.EqualsAndHashCode;
@@ -17,6 +18,7 @@
1718
import java.time.ZonedDateTime;
1819
import java.util.List;
1920
import java.util.Map;
21+
import java.util.Objects;
2022
import java.util.Set;
2123

2224
import static com.mailgun.util.Constants.FIELD_CANNOT_BE_NULL_OR_EMPTY;
@@ -91,6 +93,14 @@ public class Message {
9193
*/
9294
Set<File> attachment;
9395

96+
/**
97+
* <p>
98+
* File attachment in form of {@link FormData}.
99+
* </p>
100+
*/
101+
@FormProperty("attachment")
102+
FormData formData;
103+
94104
/**
95105
* <p>
96106
* Attachment with inline disposition.
@@ -285,6 +295,10 @@ public Message build() {
285295
.findFirst()
286296
.orElseThrow(() -> new IllegalArgumentException(String.format(FIELD_CANNOT_BE_NULL_OR_EMPTY, "to")));
287297

298+
if (CollectionUtils.isNotEmpty(super.attachment) && Objects.nonNull(super.formData)) {
299+
throw new IllegalArgumentException("You cannot use 'attachment' and 'formData' together");
300+
}
301+
288302
return super.build();
289303
}
290304
}

src/test/java/com/mailgun/integration/MailgunMessagesIntegrationTest.java

+25
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package com.mailgun.integration;
22

33
import java.io.File;
4+
import java.io.FileInputStream;
45
import java.io.IOException;
6+
import java.io.InputStream;
57
import java.time.ZonedDateTime;
68
import java.util.Arrays;
79
import java.util.HashMap;
810
import java.util.LinkedHashMap;
911
import java.util.Map;
1012

13+
import org.apache.commons.io.IOUtils;
1114
import org.junit.jupiter.api.BeforeAll;
1215
import org.junit.jupiter.api.Test;
1316

@@ -20,6 +23,7 @@
2023
import com.mailgun.util.ObjectMapperUtil;
2124
import feign.Request;
2225
import feign.Response;
26+
import feign.form.FormData;
2327

2428
import static com.mailgun.constants.IntegrationTestConstants.EMAIL_FROM;
2529
import static com.mailgun.constants.IntegrationTestConstants.EMAIL_TO;
@@ -204,6 +208,27 @@ void message_Attachment_Test() {
204208
assertEquals(EMAIL_RESPONSE_MESSAGE, result.getMessage());
205209
}
206210

211+
@Test
212+
void message_Attachment_FormData_Test() throws IOException {
213+
// Emulate InputStream
214+
InputStream inputStream = new FileInputStream("src/test/resources/mailgun_awesomeness.txt");
215+
byte[] bytes = IOUtils.toByteArray(inputStream);
216+
FormData formData = new FormData("text/plain", "mailgun_awesomeness.txt", bytes);
217+
218+
Message message = Message.builder()
219+
.from(EMAIL_FROM)
220+
.to(EMAIL_TO)
221+
.subject("FormData attachment example.")
222+
.text(TEST_EMAIL_TEXT)
223+
.formData(formData)
224+
.build();
225+
226+
227+
MessageResponse result = mailgunMessagesApi.sendMessage(MAIN_DOMAIN, message);
228+
229+
assertEquals(EMAIL_RESPONSE_MESSAGE, result.getMessage());
230+
}
231+
207232
@Test
208233
void message_Inline_Simple_Test() {
209234
File mailgunLogo = new File("src/test/resources/mailgun_logo.png");

src/test/java/com/mailgun/integration/MailgunTemplatesIntegrationTest.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import static com.mailgun.constants.IntegrationTestConstants.MAIN_DOMAIN;
4343
import static com.mailgun.constants.IntegrationTestConstants.PRIVATE_API_KEY;
4444
import static org.junit.jupiter.api.Assertions.assertEquals;
45+
import static org.junit.jupiter.api.Assertions.assertFalse;
4546
import static org.junit.jupiter.api.Assertions.assertNotNull;
4647
import static org.junit.jupiter.api.Assertions.assertThrows;
4748
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -210,7 +211,7 @@ void getAllTemplateVersionsSuccessTest() {
210211
assertNotNull(templateWithVersions.getName());
211212
assertNotNull(templateWithVersions.getDescription());
212213
List<TemplateVersions> versions = templateWithVersions.getVersions();
213-
assertTrue(versions.size() > 1);
214+
assertFalse(versions.isEmpty());
214215
TemplateVersions version = versions.get(0);
215216
assertNotNull(version.getId());
216217
assertNotNull(version.getActive());

src/test/java/com/mailgun/model/message/MessageTest.java

+24
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,16 @@
33
import com.mailgun.enums.YesNo;
44
import com.mailgun.enums.YesNoHtml;
55
import com.mailgun.util.EmailUtil;
6+
import feign.form.FormData;
7+
8+
import org.apache.commons.io.IOUtils;
69
import org.apache.commons.lang3.StringUtils;
710
import org.junit.jupiter.api.Test;
811

912
import java.io.File;
13+
import java.io.FileInputStream;
1014
import java.io.IOException;
15+
import java.io.InputStream;
1116
import java.util.Arrays;
1217
import java.util.Collections;
1318
import java.util.HashMap;
@@ -232,6 +237,25 @@ void messageFieldToEmptyExceptionTest() {
232237
assertEquals(String.format(FIELD_CANNOT_BE_NULL_OR_EMPTY, "to"), exception.getMessage());
233238
}
234239

240+
241+
@Test
242+
void messageAttachmentAndFromDataTogetherExceptionTest() throws IOException {
243+
File file = getTempFile("temp.1");
244+
InputStream inputStream = new FileInputStream(getTempFile("temp.2"));
245+
byte[] txtBytes = IOUtils.toByteArray(inputStream);
246+
FormData formData = new FormData("text/plain", "temp.txt", txtBytes);
247+
248+
Message.MessageBuilder messageBuilder = Message.builder()
249+
.from(TEST_EMAIL_1)
250+
.to(TEST_EMAIL_2)
251+
.attachment(file)
252+
.formData(formData);
253+
254+
Exception exception = assertThrows(IllegalArgumentException.class, messageBuilder::build);
255+
256+
assertEquals("You cannot use 'attachment' and 'formData' together", exception.getMessage());
257+
}
258+
235259
private File getTempFile(String prefix) throws IOException {
236260
File file = File.createTempFile(prefix, ".tmp", new File("src/test/java/com/mailgun/utils"));
237261
file.deleteOnExit();

src/test/java/com/mailgun/util/EmailUtilTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
class EmailUtilTest {
1010

1111
@Test
12-
void emailWithNameTest() {
12+
void nameWithEmailTest() {
1313
String result = EmailUtil.nameWithEmail(TEST_USER_NAME, TEST_EMAIL_1);
1414

1515
assertEquals("Zarathustra <[email protected]>", result);

0 commit comments

Comments
 (0)