Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 16 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,34 +113,34 @@ You can find the API reference [here](https://railsware.github.io/mailtrap-java/

### General API

- [List User & Invite account accesses](examples/java/io/mailtrap/examples/general/AccountAccess.java)
- [Remove account access](examples/java/io/mailtrap/examples/general/Accounts.java)
- [Permissions](examples/java/io/mailtrap/examples/general/Permissions.java)
- [Current billing usage cycle](examples/java/io/mailtrap/examples/general/Billing.java)
- [List User & Invite account accesses](examples/java/io/mailtrap/examples/general/AccountAccessExample.java)
- [Remove account access](examples/java/io/mailtrap/examples/general/AccountsExample.java)
- [Permissions](examples/java/io/mailtrap/examples/general/PermissionsExample.java)
- [Current billing usage cycle](examples/java/io/mailtrap/examples/general/BillingExample.java)

### Sending API

- [Advanced](examples/java/io/mailtrap/examples/sending/Everything.java)
- [Minimal](examples/java/io/mailtrap/examples/sending/Minimal.java)
- [Error handling](examples/java/io/mailtrap/examples/sending/Errors.java)
- [Send email using template](examples/java/io/mailtrap/examples/sending/Template.java)
- [Advanced](examples/java/io/mailtrap/examples/sending/EverythingExample.java)
- [Minimal](examples/java/io/mailtrap/examples/sending/MinimalExample.java)
- [Error handling](examples/java/io/mailtrap/examples/sending/ErrorsExample.java)
- [Send email using template](examples/java/io/mailtrap/examples/sending/TemplateExample.java)

### Email Testing API

- [Attachments](examples/java/io/mailtrap/examples/testing/Attachments.java)
- [Inboxes](examples/java/io/mailtrap/examples/testing/Inboxes.java)
- [Messages](examples/java/io/mailtrap/examples/testing/Messages.java)
- [Projects](examples/java/io/mailtrap/examples/testing/Projects.java)
- [Send mail using template](examples/java/io/mailtrap/examples/testing/Email.java)
- [Attachments](examples/java/io/mailtrap/examples/testing/AttachmentsExample.java)
- [Inboxes](examples/java/io/mailtrap/examples/testing/InboxesExample.java)
- [Messages](examples/java/io/mailtrap/examples/testing/MessagesExample.java)
- [Projects](examples/java/io/mailtrap/examples/testing/ProjectsExample.java)
- [Send mail using template](examples/java/io/mailtrap/examples/testing/EmailExample.java)

### Bulk Sending API

- [Send mail](examples/java/io/mailtrap/examples/bulk/BulkSend.java)
- [Send mail](examples/java/io/mailtrap/examples/bulk/BulkSendExample.java)

### Contacts API

- [Contacts](examples/java/io/mailtrap/examples/contacts/Contacts.java)
- [Contact lists](examples/java/io/mailtrap/examples/contactlists/ContactLists.java)
- [Contacts](examples/java/io/mailtrap/examples/contacts/ContactsExample.java)
- [Contact lists](examples/java/io/mailtrap/examples/contactlists/ContactListsExample.java)

## Contributing

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import java.util.List;
import java.util.Map;

public class Batch {
public class BatchExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final String SENDER_EMAIL = "[email protected]";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import java.util.List;

public class BulkSend {
public class BulkSendExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final String SENDER_EMAIL = "[email protected]";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import java.util.List;
import java.util.Map;

public class ContactFields {
public class ContactFieldsExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final long ACCOUNT_ID = 1L;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import java.util.List;
import java.util.Map;

public class ContactImports {
public class ContactImportsExample {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

💡 Verification agent

🧩 Analysis chain

Rename to ContactImportsExample: LGTM. Also prune unused imports and scan for stale references.

  • Unused here: UpdateContact, UpdateContactRequest, and Collections.
  • Optional: make locals final (final var ...) to match the PR’s immutability goal.

Run to catch any leftover references to old example class names:


🏁 Script executed:

#!/bin/bash
set -euo pipefail
rg -n --glob 'examples/java/**' -P '\b(ContactImports|Minimal|AccountAccess|Batch|Attachments|Contacts|BulkSend)(?!Example)\b' || true

Length of output: 83


🏁 Script executed:

#!/bin/bash
set -euo pipefail
f="examples/java/io/mailtrap/examples/contactimports/ContactImportsExample.java"
if [ ! -f "$f" ]; then
  echo "MISSING: $f"
  exit 0
fi
echo "=== File head (1-200) ==="
sed -n '1,200p' "$f"
echo
echo "=== Import lines ==="
rg -n '^import ' "$f" || true
echo
echo "=== Symbols in file: UpdateContact, UpdateContactRequest, Collections ==="
rg -n 'UpdateContact|UpdateContactRequest|Collections' "$f" || true
echo
echo "=== Project search for base example names (word match) ==="
rg -n --glob 'examples/java/**' -w -e 'ContactImports|Minimal|AccountAccess|Batch|Attachments|Contacts|BulkSend' || true

Length of output: 2342


Remove unused imports and fix example class name mismatch.

  • Remove unused imports UpdateContact, UpdateContactRequest, and Collections from examples/java/io/mailtrap/examples/contactimports/ContactImportsExample.java (lines 7–8, 10).
  • Fix class/file name mismatch: examples/java/io/mailtrap/examples/sending/BatchExample.java declares public class Batch (line 13) — rename the class to BatchExample or rename the file to Batch.java.
  • Optional: make local vars final (importRequest, createResponse, contactImportResponse) to match the PR’s immutability goal.
🤖 Prompt for AI Agents
In examples/java/io/mailtrap/examples/contactimports/ContactImportsExample.java
around lines 7–10 and 14, remove the unused imports UpdateContact,
UpdateContactRequest, and Collections and ensure the public class name matches
the file name (ContactImportsExample) if it does not; additionally, in
examples/java/io/mailtrap/examples/sending/BatchExample.java at line 13 change
the declared class name from Batch to BatchExample (or rename the file to
Batch.java) so class and filename match, and optionally mark local variables
importRequest, createResponse, and contactImportResponse as final to follow
immutability conventions.


private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final long ACCOUNT_ID = 1L;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import io.mailtrap.config.MailtrapConfig;
import io.mailtrap.factory.MailtrapClientFactory;

public class ContactLists {
public class ContactListsExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final long ACCOUNT_ID = 1L;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import java.util.List;
import java.util.Map;

public class Contacts {
public class ContactsExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final long ACCOUNT_ID = 1L;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

import java.util.List;

public class EmailTemplates {
public class EmailTemplatesExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final long ACCOUNT_ID = 1L;
Expand All @@ -25,8 +25,6 @@ public static void main(String[] args) {
.token(TOKEN)
.build();

new EmailTemplate(EMAIL_TEMPLATE_NAME, EMAIL_TEMPLATE_CATEGORY, EMAIL_TEMPLATE_SUBJECT, EMAIL_TEMPLATE_BODY_TEXT, EMAIL_TEMPLATE_BODY_HTML);

final var client = MailtrapClientFactory.createMailtrapClient(config);

final var createRequest = new CreateEmailTemplateRequest(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

import java.util.List;

public class AccountAccess {
public class AccountAccessExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final long ACCOUNT_ID = 1L;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import io.mailtrap.config.MailtrapConfig;
import io.mailtrap.factory.MailtrapClientFactory;

public class Accounts {
public class AccountsExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import io.mailtrap.config.MailtrapConfig;
import io.mailtrap.factory.MailtrapClientFactory;

public class Billing {
public class BillingExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final long ACCOUNT_ID = 1L;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

import java.util.List;

public class Permissions {
public class PermissionsExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final long ACCOUNT_ID = 1L;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import java.util.List;
import java.util.UUID;

public class Errors {
public class ErrorsExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final String SENDER_EMAIL = "[email protected]";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import java.util.List;
import java.util.Map;

public class Everything {
public class EverythingExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final String SENDER_EMAIL = "[email protected]";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import java.util.List;

public class Minimal {
public class MinimalExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final String SENDER_EMAIL = "[email protected]";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import java.util.List;
import java.util.Map;

public class Template {
public class TemplateExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final String SENDER_EMAIL = "[email protected]";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import static io.mailtrap.model.request.sendingdomains.CreateSendingDomainRequest.SendingDomainData;

public class SendingDomains {
public class SendingDomainsExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final long ACCOUNT_ID = 1L;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import io.mailtrap.config.MailtrapConfig;
import io.mailtrap.factory.MailtrapClientFactory;

public class Suppressions {
public class SuppressionsExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final long ACCOUNT_ID = 1L;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import io.mailtrap.factory.MailtrapClientFactory;
import io.mailtrap.model.request.accountaccesses.ListMessagesQueryParams;

public class Attachments {
public class AttachmentsExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final long ACCOUNT_ID = 1L;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import java.util.List;
import java.util.Map;

public class Batch {
public class BatchExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final String SENDER_EMAIL = "[email protected]";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import java.util.List;
import java.util.Map;

public class Email {
public class EmailExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final String SENDER_EMAIL = "[email protected]";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import io.mailtrap.model.request.inboxes.CreateInboxRequest;
import io.mailtrap.model.request.inboxes.UpdateInboxRequest;

public class Inboxes {
public class InboxesExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final long ACCOUNT_ID = 1L;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import io.mailtrap.model.request.messages.ForwardMessageRequest;
import io.mailtrap.model.request.messages.UpdateMessageRequest;

public class Messages {
public class MessagesExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final String FORWARD_EMAIL_TO = "[email protected]";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import io.mailtrap.factory.MailtrapClientFactory;
import io.mailtrap.model.request.projects.CreateUpdateProjectRequest;

public class Projects {
public class ProjectsExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final long ACCOUNT_ID = 1L;
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/io/mailtrap/CustomValidator.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
public class CustomValidator {
private final Validator validator;

public CustomValidator(Validator validator) {
public CustomValidator(final Validator validator) {
this.validator = validator;
}

Expand All @@ -26,7 +26,7 @@ public CustomValidator(Validator validator) {
* @param objectToValidate the object to validate
* @return a map of validation errors, with property names as keys and error messages as values
*/
public <T> Map<String, String> validate(T objectToValidate) {
public <T> Map<String, String> validate(final T objectToValidate) {
final var violations = validator.validate(objectToValidate);

final var errors = new HashMap<String, String>();
Expand All @@ -48,7 +48,7 @@ public <T> Map<String, String> validate(T objectToValidate) {
* @param objectToValidate the object to validate
* @return a string representation of the validation errors, or an empty string if there are no errors
*/
public <T> String validateAndGetViolationsAsString(T objectToValidate) {
public <T> String validateAndGetViolationsAsString(final T objectToValidate) {
return this.validate(objectToValidate).entrySet().stream()
.map(violation -> violation.getKey() + "=" + violation.getValue())
.collect(Collectors.joining("; "));
Expand Down
1 change: 0 additions & 1 deletion src/main/java/io/mailtrap/Mapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ public class Mapper {
private static final ObjectMapper mapper = JsonMapper.builder()
.disable(MapperFeature.CAN_OVERRIDE_ACCESS_MODIFIERS)
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
.serializationInclusion(JsonInclude.Include.NON_NULL)
.serializationInclusion(JsonInclude.Include.NON_EMPTY)
.addModule(new SimpleModule().addDeserializer(ErrorResponse.class, new ErrorResponseDeserializer()))
.addModule(new JavaTimeModule())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,31 +16,31 @@

public class AccountAccessesImpl extends ApiResource implements AccountAccesses {

public AccountAccessesImpl(MailtrapConfig config) {
public AccountAccessesImpl(final MailtrapConfig config) {
super(config);
this.apiHost = Constants.GENERAL_HOST;
}

@Override
public List<AccountAccessResponse> listUserAndInviteAccountAccesses(long accountId, @NonNull ListAccountAccessQueryParams params) {
var queryParams = RequestData.buildQueryParams(
entry("domain_uuids", Optional.ofNullable(params.getDomainUuids())),
entry("inbox_ids", Optional.ofNullable(params.getInboxIds())),
entry("project_ids", Optional.ofNullable(params.getProjectIds())));
public List<AccountAccessResponse> listUserAndInviteAccountAccesses(final long accountId, @NonNull final ListAccountAccessQueryParams params) {
final var queryParams = RequestData.buildQueryParams(
entry("domain_uuids", Optional.ofNullable(params.getDomainUuids())),
entry("inbox_ids", Optional.ofNullable(params.getInboxIds())),
entry("project_ids", Optional.ofNullable(params.getProjectIds())));

return httpClient.getList(
String.format(apiHost + "/api/accounts/%s/account_accesses", accountId),
new RequestData(queryParams),
AccountAccessResponse.class
String.format(apiHost + "/api/accounts/%d/account_accesses", accountId),
new RequestData(queryParams),
AccountAccessResponse.class
);
}

@Override
public RemoveAccountAccessResponse removeAccountAccess(long accountAccessId, long accountId) {
public RemoveAccountAccessResponse removeAccountAccess(final long accountAccessId, final long accountId) {
return httpClient.delete(
String.format(apiHost + "/api/accounts/%s/account_accesses/%s", accountId, accountAccessId),
new RequestData(),
RemoveAccountAccessResponse.class
String.format(apiHost + "/api/accounts/%d/account_accesses/%d", accountId, accountAccessId),
new RequestData(),
RemoveAccountAccessResponse.class
);
}
}
8 changes: 4 additions & 4 deletions src/main/java/io/mailtrap/api/accounts/AccountsImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,17 @@

public class AccountsImpl extends ApiResource implements Accounts {

public AccountsImpl(MailtrapConfig config) {
public AccountsImpl(final MailtrapConfig config) {
super(config);
this.apiHost = Constants.GENERAL_HOST;
}

@Override
public List<AccountsResponse> getAllAccounts() {
return httpClient.getList(
String.format(apiHost + "/api/accounts"),
new RequestData(),
AccountsResponse.class
String.format(apiHost + "/api/accounts"),
new RequestData(),
AccountsResponse.class
);
}
}
16 changes: 7 additions & 9 deletions src/main/java/io/mailtrap/api/apiresource/ApiResource.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,19 @@ public abstract class ApiResource {
* HTTP client for making API requests.
*/
protected final CustomHttpClient httpClient;

/**
* The API host
*/
protected String apiHost;

/**
* The authentication token used for API requests.
*/
protected final String token;
/**
* The API host
*/
protected String apiHost;

protected ApiResource(MailtrapConfig config) {
protected ApiResource(final MailtrapConfig config) {
this.httpClient = config.getHttpClient() != null
? config.getHttpClient()
: new DefaultMailtrapHttpClient(config);
? config.getHttpClient()
: new DefaultMailtrapHttpClient(config);
this.token = config.getToken();
}

Expand Down
Loading