Skip to content

Commit a4578d0

Browse files
author
Vitalii.Chornobryvyi
committed
release 1.0.9
1 parent bb746c9 commit a4578d0

File tree

6 files changed

+133
-3
lines changed

6 files changed

+133
-3
lines changed

Diff for: CHANGELOG.md

+5
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.9] (released: 2023-09-27)
9+
### Updated
10+
- allows for appending custom MIME headers to a message
11+
812
## [1.0.8] (released: 2023-05-25)
913
### Updated
1014
- updated dependencies
@@ -55,6 +59,7 @@ adheres to _[Semantic Versioning][semver]_.
5559
- Add Import a list of bounces from CSV file API
5660

5761

62+
[1.0.9]: https://github.com/mailgun/mailgun-java/compare/release/1.0.8...release/1.0.9
5863
[1.0.8]: https://github.com/mailgun/mailgun-java/compare/release/1.0.7...release/1.0.8
5964
[1.0.7]: https://github.com/mailgun/mailgun-java/compare/release/1.0.6...release/1.0.7
6065
[1.0.6]: https://github.com/mailgun/mailgun-java/compare/release/1.0.5...release/1.0.6

Diff for: README.md

+50-2
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ Add the following to your `pom.xml`:
7676
<dependency>
7777
<groupId>com.mailgun</groupId>
7878
<artifactId>mailgun-java</artifactId>
79-
<version>1.0.8</version>
79+
<version>1.0.9</version>
8080
</dependency>
8181
...
8282
</dependencies>
@@ -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.8'
88+
implementation 'com.mailgun:mailgun-java:1.0.9'
8989
```
9090

9191

@@ -264,6 +264,8 @@ More information:
264264
- [Send email (delay example)](#send-email-delay-example)
265265
- [Send email (reply-to example)](#send-email-reply-to-example)
266266
- [Send email (mailing list example)](#send-email-mailing-list-example)
267+
- [Send email (sender example)](#send-email-sender-example)
268+
- [Send email (with custom form property)](#send-email-with-custom-form-property)
267269
- [Send email(s) in MIME format](#send-mime-emails)
268270
- [Store Messages](#store-messages)
269271
- [Set up MailgunStoreMessagesApi](#Set-up-MailgunStoreMessagesApi)
@@ -623,6 +625,52 @@ Asynchronously send email(s).
623625
MessageResponse messageResponse = mailgunMessagesApi.sendMessage(DOMAIN, message);
624626
```
625627

628+
#### Send email (sender example)
629+
```java
630+
Message message = Message.builder()
631+
.from(EMAIL_FROM)
632+
.to(EMAIL_TO)
633+
.sender(SENDER_EMAIL)
634+
.subject(SUBJECT)
635+
.text(TEXT)
636+
.build();
637+
638+
MessageResponse messageResponse = mailgunMessagesApi.sendMessage(DOMAIN, message);
639+
```
640+
or sender with name and email
641+
```java
642+
Message message = Message.builder()
643+
.from(EMAIL_FROM)
644+
.to(EMAIL_TO)
645+
.sender(EmailUtil.nameWithEmail(SENDER_NAME, SENDER_EMAIL))
646+
.subject(SUBJECT)
647+
.text(TEXT)
648+
.build();
649+
650+
MessageResponse messageResponse = mailgunMessagesApi.sendMessage(DOMAIN, message);
651+
```
652+
653+
#### Send email (with custom form property)
654+
You can send email(s) with your own custom dynamic form property with allowed prefixes such as: ```t:, o:, h:, v:``` with the followed by any arbitrary value.
655+
```java
656+
MailgunMessagesApi mailgunMessagesApi = MailgunClient.config(PRIVATE_API_KEY)
657+
.createApiWithRequestInterceptor(MailgunMessagesApi.class,
658+
FormPropertyRequestInterceptor.builder()
659+
.addProperty("h:Sender", EmailUtil.nameWithEmail(SENDER_NAME, SENDER_EMAIL))
660+
.addProperty("h:X-My-Header", "my_custom_header")
661+
.build()
662+
);
663+
664+
Message message = Message.builder()
665+
.from(EMAIL_FROM)
666+
.to(EMAIL_TO)
667+
.subject(SUBJECT)
668+
.text(TEXT)
669+
.build();
670+
671+
MessageResponse messageResponse = mailgunMessagesApi.sendMessage(DOMAIN, message);
672+
```
673+
626674
#### Send MIME email(s)
627675
Send email(s) in MIME format
628676
```java

Diff for: 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.9-SNAPSHOT</version>
9+
<version>1.0.9</version>
1010
<packaging>jar</packaging>
1111

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

Diff for: src/main/java/com/mailgun/client/MailgunClient.java

+6
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import feign.Feign;
1515
import feign.Logger;
1616
import feign.Request;
17+
import feign.RequestInterceptor;
1718
import feign.Retryer;
1819
import feign.auth.BasicAuthRequestInterceptor;
1920
import feign.codec.ErrorDecoder;
@@ -186,6 +187,11 @@ public <T extends MailgunApi> T createApi(Class<T> apiType) {
186187
return getFeignBuilder().target(apiType, url);
187188
}
188189

190+
public <T extends MailgunApi> T createApiWithRequestInterceptor(Class<T> apiType, RequestInterceptor requestInterceptor) {
191+
String url = MailgunApiUtil.getFullUrl(apiType, baseUrl);
192+
return getFeignBuilder().requestInterceptor(requestInterceptor).target(apiType, url);
193+
}
194+
189195
public <T extends MailgunApi> T createAsyncApi(Class<T> apiType) {
190196
String url = MailgunApiUtil.getFullUrl(apiType, baseUrl);
191197
return getAsyncFeignBuilder().target(apiType, url);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.mailgun.form;
2+
3+
import java.util.ArrayList;
4+
import java.util.Collection;
5+
import java.util.HashMap;
6+
import java.util.Map;
7+
8+
import feign.RequestInterceptor;
9+
import feign.RequestTemplate;
10+
import feign.form.FormProperty;
11+
12+
/**
13+
* <p>
14+
* Implementation of the {@link RequestInterceptor} for a creating custom dynamic {@link FormProperty}
15+
* with allowed prefixes such as: {@code t:, o:, h:, v:} with the followed by any arbitrary value
16+
* </p>
17+
* @author Vitalii Chornobryvyi
18+
*/
19+
public class FormPropertyRequestInterceptor implements RequestInterceptor {
20+
private final Map<String, Collection<String>> properties;
21+
22+
private FormPropertyRequestInterceptor(Map<String, Collection<String>> properties) {
23+
this.properties = properties;
24+
}
25+
26+
public static Builder builder() {
27+
return new Builder();
28+
}
29+
30+
@Override
31+
public void apply(RequestTemplate requestTemplate) {
32+
requestTemplate.queries(properties);
33+
}
34+
35+
public static class Builder {
36+
private final Map<String, Collection<String>> properties = new HashMap<>();
37+
38+
private Builder() {
39+
}
40+
41+
public Builder addProperty(String propertyName, String propertyValue) {
42+
properties.computeIfAbsent(propertyName, key -> new ArrayList<>()).add(propertyValue);
43+
return this;
44+
}
45+
46+
public FormPropertyRequestInterceptor build() {
47+
return new FormPropertyRequestInterceptor(properties);
48+
}
49+
}
50+
}

Diff for: src/main/java/com/mailgun/model/message/Message.java

+21
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,14 @@ public class Message {
249249
@FormProperty("h:Reply-To")
250250
String replyTo;
251251

252+
/**
253+
* <p>
254+
* Specify Sender address
255+
* </p>
256+
*/
257+
@FormProperty("h:Sender")
258+
String sender;
259+
252260
/**
253261
* <p>
254262
* A valid JSON-encoded dictionary, where key is a plain recipient address and value is a dictionary
@@ -657,6 +665,19 @@ public MessageBuilder replyTo(String replyTo) {
657665
return this;
658666
}
659667

668+
/**
669+
* <p>
670+
* Specify Sender address
671+
* </p>
672+
*
673+
* @param sender Sender address
674+
* @return Returns a reference to this object so that method calls can be chained together.
675+
*/
676+
public MessageBuilder sender(String sender) {
677+
this.sender = sender;
678+
return this;
679+
}
680+
660681
/**
661682
* <p>
662683
* A dictionary, where the key is a plain recipient address

0 commit comments

Comments
 (0)