public void start() { // Start a local STMP server, remove this line if you want to use your own server. // It just prints the sent message to the console LocalSmtpServer.start(2528); MailConfig mailConfig = new MailConfig().setHostname("localhost").setPort(2528); MailClient mailClient = MailClient.createShared(vertx, mailConfig); MailMessage email = new MailMessage() .setFrom("user1@example.com") .setTo(Arrays.asList("user2@example.com", "user3@example.com", "user4@example.com")) .addHeader("X-Mailer", "Vert.x Mail-Client 3.6.2") .addHeader("Message-ID", "12345@example.com") .addHeader("Reply-To", "reply@example.com") .addHeader("Received", "by vertx mail service") .addHeader("Received", "from [192.168.1.1] by localhost") .setText("This message should have a custom Message-ID"); mailClient.sendMail(email, result -> { if (result.succeeded()) { System.out.println(result.result()); System.out.println("Mail sent"); } else { System.out.println("got exception"); result.cause().printStackTrace(); } }); }
@Override public void start() { // Start a local STMP server, remove this line if you want to use your own server. // It just prints the sent message to the console LocalSmtpServer.start(2525); MailClient mailClient = MailClient.createShared(vertx, new MailConfig().setPort(2525)); MailMessage email = new MailMessage() .setFrom("user@example.com (Sender)") .setTo(Arrays.asList( "user@example.com (User Name)", "other@example.com (Another User)")) .setBounceAddress("user@example.com (Bounce)") .setSubject("Test email") .setText("this is a test email"); mailClient.sendMail(email, result -> { if (result.succeeded()) { System.out.println(result.result()); System.out.println("Mail sent"); } else { System.out.println("got exception"); result.cause().printStackTrace(); } }); }
MailClient mailClient = MailClient.createShared(vertx, new MailConfig().setPort(2526)); MailMessage email = new MailMessage() .setFrom("user@example.com (Sender)") .setTo("user@example.com (User Name)") .setSubject("Test email") .setText("full message is readable as html only") .setHtml("visit vert.x <a href=\"http://vertx.io/\"><img src=\"cid:image1@example.com\"></a>"); MailAttachment attachment = new MailAttachment() .setData(vertx.fileSystem().readFileBlocking("logo-white-big.png")) .setContentType("image/png") .setName("logo-white-big.png") .setDisposition("inline") .addHeader("Content-ID", "<image1@example.com>"); email.setInlineAttachment(list); mailClient.sendMail(email, result -> { if (result.succeeded()) { System.out.println(result.result());
MailConfig mailConfig = new MailConfig() .setHostname("localhost") .setPort(5870) .setLogin(LoginOption.REQUIRED) .setAuthMethods("PLAIN") .setUsername("username") .setPassword("password"); MailClient mailClient = MailClient.createShared(vertx, mailConfig); MailMessage email = new MailMessage() .setFrom("user1@example.com") .setTo("user2@example.com") .setCc("user3@example.com") .setBcc("user4@example.com") .setBounceAddress("bounce@example.com") .setSubject("Test email with HTML") .setText("this is a message") .setHtml("<a href=\"http://vertx.io\">vertx.io</a>"); list.add(new MailAttachment() .setData(image) .setName("logo-white-big.png") .setContentType("image/png") .setDisposition("inline") .setDescription("logo of vert.x web page")); email.setAttachment(list);
public void start() { // Start a local STMP server, remove this line if you want to use your own server. // It just prints the sent message to the console LocalSmtpServer.start(2527); JsonObject config = new JsonObject(); config.put("port", 2527); config.put("address", "vertx.mail"); vertx.deployVerticle(MAIL_SERVICE_VERTICLE, new DeploymentOptions().setConfig(config), done -> { MailService mailService = MailService.createEventBusProxy(vertx, "vertx.mail"); MailMessage email = new MailMessage() .setBounceAddress("bounce@example.com") .setTo("user@example.com") .setSubject("this message has no content at all"); mailService.sendMail(email, result -> { if (result.succeeded()) { System.out.println(result.result()); System.out.println("Mail sent"); } else { System.out.println("got exception"); result.cause().printStackTrace(); } }); }); }
@Test public void mailTestTLSCase(TestContext testContext) { this.testContext = testContext; final MailConfig config = configLogin().setHostname("LOCALHOST").setStarttls(StartTLSOptions.REQUIRED) .setKeyStore("src/test/resources/certs/client.jks").setKeyStorePassword("password"); MailClient mailClient = MailClient.createNonShared(vertx, config); testSuccess(mailClient, exampleMessage(), assertExampleMessage()); }
@Test public void mailTestNoBody(TestContext testContext) { this.testContext=testContext; MailMessage email = new MailMessage() .setFrom("user@example.com") .setTo("user@example.com") .setAttachment(new MailAttachment() .setData(TestUtils.asBuffer(0xff, 0xff, 0xff, 0xff, 0xff, 0xff))); testSuccess(email); }
@Test public void mailTestTLSWrongHostTrustAll(TestContext testContext) { this.testContext = testContext; final MailConfig config = defaultConfig().setHostname("127.0.0.1").setPort(1587).setStarttls(StartTLSOptions.REQUIRED) .setKeyStore("src/test/resources/certs/client.jks").setKeyStorePassword("password").setTrustAll(true); MailClient mailClient = MailClient.createNonShared(vertx, config); testSuccess(mailClient); }
@Test public void mailTestSSLNoTrust(TestContext testContext) { this.testContext = testContext; startServer(SERVER2_JKS); final MailConfig config = new MailConfig("localhost", 1465, StartTLSOptions.DISABLED, LoginOption.DISABLED) .setSsl(true); MailClient mailClient = MailClient.createNonShared(vertx, config); testException(mailClient, SSLHandshakeException.class); }
@Test public void connectionRefusedTest(TestContext testContext) { this.testContext=testContext; testException(MailClient.createNonShared(vertx, new MailConfig("localhost", 1588))); }
@Test public void authSelectMethodsNoneTest(TestContext testContext) { this.testContext=testContext; smtpServer.setDialogue("220 example.com ESMTP", "EHLO", "250-example.com\n" + "250 AUTH PLAIN LOGIN"); testException(MailClient.createNonShared(vertx, configLogin().setAuthMethods("DIGEST-MD5 CRAM-MD5"))); }
/** * test we have Login REQUIRED but no login data in the config */ @Test public void authAuthDataMissingTest(TestContext testContext) { this.testContext=testContext; smtpServer.setDialogue("220 example.com ESMTP", "EHLO", "250-example.com\n" + "250 AUTH PLAIN"); testException(MailClient.createNonShared(vertx, defaultConfig().setLogin(LoginOption.REQUIRED))); }
@Test public void mailTestTLSNoTrust(TestContext testContext) { this.testContext=testContext; MailClient mailClient = MailClient.createNonShared(vertx, configLogin().setStarttls(StartTLSOptions.REQUIRED)); testException(mailClient); }
/** * @return */ protected MailClient mailClientLogin() { return MailClient.createNonShared(vertx, configLogin()); }
/** * @return */ protected MailClient mailClientNoSSL() { return MailClient.createNonShared(vertx, configNoSSL()); }
/** * @return */ protected MailClient mailClientDefault() { return MailClient.createNonShared(vertx, defaultConfig()); }
/** * @return */ protected MailClient mailClientTLS() { return MailClient.createNonShared(vertx, configTLS()); }
/** * @return */ protected MailClient mailClientTLSTrustAll() { return MailClient.createNonShared(vertx, configTLSTrustAll()); }
@Test public void mailTestTLSCorrectCert(TestContext testContext) { this.testContext = testContext; final MailConfig config = configLogin().setStarttls(StartTLSOptions.REQUIRED) .setKeyStore("src/test/resources/certs/client.jks").setKeyStorePassword("password"); MailClient mailClient = MailClient.createNonShared(vertx, config); testSuccess(mailClient, exampleMessage(), assertExampleMessage()); }
/** * @return */ protected MailClient mailClientLogin(String user, String pw) { return MailClient.createNonShared(vertx, configLogin(user, pw)); }