Merge pull request 'email' (#34) from email into master

Reviewed-on: http://git.plannaplan.pl/filipizydorczyk/backend/pulls/34
This commit is contained in:
Marcin Woźniak 2020-12-21 17:11:32 +01:00
commit e18f285dd6
12 changed files with 151 additions and 9 deletions

View File

@ -40,6 +40,11 @@ W paczce dla proda w protpertiesach poufne dane odczytywane są ze zmiennych śr
- `PLANNAPLAN_MYSQL_DB` - nazwa bazy dancyh. W profilu **dev** jest to np test - `PLANNAPLAN_MYSQL_DB` - nazwa bazy dancyh. W profilu **dev** jest to np test
- `PLANNAPLAN_MYSQL_DB_USERNAME` - nazwa użytkownika bazy - `PLANNAPLAN_MYSQL_DB_USERNAME` - nazwa użytkownika bazy
- `PLANNAPLAN_MYSQL_DB_PASSWORD` - hasło użytkownika bazy - `PLANNAPLAN_MYSQL_DB_PASSWORD` - hasło użytkownika bazy
- `PLANNAPLAN_EMAIL_HOST` - host naszego dostawcy maila z którego będziemy wssyłać wiadomości
- `PLANNAPLAN_EMAIL_PORT` - port naszego dostawcy maila
- `PLANNAPLAN_EMAIL_USERNAME` - login naszego maila
- `PLANNAPLAN_EMAIL_PASSWORD` - hasło naszego maila
- `PLANNAPLAN_EMAIL` - nasz adres maila
## Packaging ## Packaging

View File

@ -68,6 +68,12 @@
<version>3.17</version> <version>3.17</version>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
@ -85,14 +91,14 @@
<version>3.0.2</version> <version>3.0.2</version>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId> <artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0</version> <version>3.0.0</version>
<configuration> <configuration>
<source>1.8</source> <source>1.8</source>
<target>1.8</target> <target>1.8</target>
</configuration> </configuration>
</plugin> </plugin>
<plugin> <plugin>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version> <version>3.8.0</version>

View File

@ -0,0 +1,9 @@
{
"properties": [
{
"name": "plannaplan.email",
"type": "java.lang.String",
"description": "Email from which app sends message"
}
]
}

View File

@ -0,0 +1,38 @@
package com.plannaplan.services;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;
/**
* Service to send emails
*/
@Service
public class EmailService {
@Autowired
private JavaMailSender emailSender;
@Value("${plannaplan.email}")
private String appEmail;
public EmailService() {
}
/**
* send simple text email
*
* @param destination destitnaion mail
* @param message text to be send
*/
public void sendMail(String destination, String message) {
SimpleMailMessage mailMessage = new SimpleMailMessage();
mailMessage.setFrom(appEmail);
mailMessage.setTo(destination);
mailMessage.setSubject("[Plan na plan] INFO");
mailMessage.setText(message);
emailSender.send(mailMessage);
}
}

View File

@ -0,0 +1,22 @@
package com.plannaplan.services;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@Service
public class EventService {
@Autowired
private EmailService emailService;
@Scheduled(cron = "0 2 17 * * *")
public void collectGroupLosses() {
System.out.println("Checking for groups");
}
@Scheduled(cron = "0 30 17 * * *")
public void testMail() {
this.emailService.sendMail("kaczor982@gmail.com", "Cześć. Jestem Tomek.");
}
}

View File

@ -0,0 +1,29 @@
package com.plannaplan.services;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration
public class EmailServiceTest {
@Autowired
private EmailService service;
@Test
@Ignore
/**
* This test is ignored because we don't have way to check if email has arrived.
* Check mailchater to check this manually
*/
public void shouldSendSimpleEmail() {
this.service.sendMail("shouldSendSimpleEmail@EmailService.test", "This is totally simple message");
}
}

View File

@ -8,5 +8,11 @@ spring.jpa.hibernate.ddl-auto=create-drop
spring.jackson.serialization.fail-on-empty-beans=false spring.jackson.serialization.fail-on-empty-beans=false
spring.main.allow-bean-definition-overriding=true spring.main.allow-bean-definition-overriding=true
spring.jackson.default-property-inclusion = NON_NULL spring.jackson.default-property-inclusion = NON_NULL
spring.mail.host=localhost
spring.mail.port=1025
spring.mail.properties.mail.smtp.auth=false
spring.mail.properties.mail.smtp.starttls.enable=false
plannaplan.email = plannaplan.kontakt@gmail.com
server.port=1285 server.port=1285

View File

@ -16,9 +16,12 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener; import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.EnableScheduling;
import com.plannaplan.services.ConfiguratorService; import com.plannaplan.services.ConfiguratorService;
@SpringBootApplication @SpringBootApplication
@EnableScheduling
public class App { public class App {
public final static String API_VERSION = "v1"; public final static String API_VERSION = "v1";

View File

@ -9,6 +9,11 @@
"name": "plannaplan.frontendUrl", "name": "plannaplan.frontendUrl",
"type": "java.lang.String", "type": "java.lang.String",
"description": "Url where frontend app is located" "description": "Url where frontend app is located"
},
{
"name": "plannaplan.email",
"type": "java.lang.String",
"description": "Email from which app sends message"
} }
] ]
} }

View File

@ -8,7 +8,14 @@ spring.jpa.hibernate.ddl-auto=create-drop
spring.jackson.serialization.fail-on-empty-beans=false spring.jackson.serialization.fail-on-empty-beans=false
spring.main.allow-bean-definition-overriding=true spring.main.allow-bean-definition-overriding=true
spring.jackson.default-property-inclusion = NON_NULL spring.jackson.default-property-inclusion = NON_NULL
spring.mail.host=localhost
spring.mail.port=1025
# spring.mail.username=<login user to smtp server>
# spring.mail.password=<login password to smtp server>
spring.mail.properties.mail.smtp.auth=false
spring.mail.properties.mail.smtp.starttls.enable=false
logging.level.io.swagger.models.parameters.AbstractSerializableParameter=ERROR logging.level.io.swagger.models.parameters.AbstractSerializableParameter=ERROR
server.port=1285 server.port=1285
plannaplan.dev = true plannaplan.dev = true
plannaplan.frontendUrl= http://localhost:3000 plannaplan.frontendUrl = http://localhost:3000
plannaplan.email = plannaplan.kontakt@gmail.com

View File

@ -9,13 +9,19 @@ spring.jackson.serialization.fail-on-empty-beans=false
spring.main.allow-bean-definition-overriding=true spring.main.allow-bean-definition-overriding=true
spring.jackson.default-property-inclusion = NON_NULL spring.jackson.default-property-inclusion = NON_NULL
logging.level.io.swagger.models.parameters.AbstractSerializableParameter=ERROR logging.level.io.swagger.models.parameters.AbstractSerializableParameter=ERROR
spring.mail.host=${PLANNAPLAN_EMAIL_HOST}
spring.mail.port=${PLANNAPLAN_EMAIL_PORT}
spring.mail.username=${PLANNAPLAN_EMAIL_USERNAME}
spring.mail.password=${PLANNAPLAN_EMAIL_PASSWORD}
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
server.port=1285 server.port=1285
plannaplan.email = ${PLANNAPLAN_EMAIL}
plannaplan.dev = false plannaplan.dev = false
plannaplan.frontendUrl= https://wmi.plannaplan.pl plannaplan.frontendUrl= https://wmi.plannaplan.pl
security.require-ssl=true security.require-ssl=true
server.ssl.key-store=/keys/keystore.p12 server.ssl.key-store=/keys/keystore.p12
server.ssl.key-store-password= server.ssl.key-store-password=
server.ssl.keyStoreType=PKCS12 server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias=tomcat server.ssl.keyAlias=tomcat

View File

@ -20,3 +20,9 @@ services:
restart: always restart: always
ports: ports:
- 8080:8080 - 8080:8080
mailcatcher:
image: schickling/mailcatcher:latest
ports:
- "127.0.0.1:1080:1080"
- "127.0.0.1:1025:1025"