diff --git a/.gitignore b/.gitignore
index d730885..0354255 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,6 +13,7 @@ src/main/resources/application.yml
*.db
lib/
bin/
+*.html
### STS ###
.apt_generated
diff --git a/pom.xml b/pom.xml
index 75461db..290132b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -77,6 +77,7 @@
spring-integration-mail
5.3.0.RELEASE
+
org.jsoup
jsoup
@@ -88,7 +89,7 @@
1.18.10
-
+
diff --git a/src/main/java/io/github/trashemail/Configurations/TrashemailConfig.java b/src/main/java/io/github/trashemail/Configurations/TrashemailConfig.java
index 2e9967b..d12ca0e 100644
--- a/src/main/java/io/github/trashemail/Configurations/TrashemailConfig.java
+++ b/src/main/java/io/github/trashemail/Configurations/TrashemailConfig.java
@@ -13,9 +13,14 @@
@ConfigurationProperties(prefix = "trashemail")
public class TrashemailConfig {
private Integer maxEmailsPerUser;
+ private String hostURI;
+ private String downloadPath;
- @Override
- public String toString() {
- return Integer.toString(maxEmailsPerUser);
+ @Override public String toString() {
+ return "TrashemailConfig{" +
+ "maxEmailsPerUser=" + maxEmailsPerUser +
+ ", hostURI='" + hostURI + '\'' +
+ ", downloadPath='" + downloadPath + '\'' +
+ '}';
}
}
diff --git a/src/main/java/io/github/trashemail/Telegram/DTO/messageEntities/InlineKeyboardButton.java b/src/main/java/io/github/trashemail/Telegram/DTO/messageEntities/InlineKeyboardButton.java
index 1bc7d6c..e9b5069 100644
--- a/src/main/java/io/github/trashemail/Telegram/DTO/messageEntities/InlineKeyboardButton.java
+++ b/src/main/java/io/github/trashemail/Telegram/DTO/messageEntities/InlineKeyboardButton.java
@@ -11,14 +11,18 @@
@Setter
@NoArgsConstructor
public class InlineKeyboardButton {
+ /*
+ According the docs, either of callback_data or uri, only one should be set.
+ */
private String text;
private String callback_data;
+ private String url;
- @Override
- public String toString() {
+ @Override public String toString() {
return "InlineKeyboardButton{" +
"text='" + text + '\'' +
", callback_data='" + callback_data + '\'' +
+ ", url='" + url + '\'' +
'}';
}
}
diff --git a/src/main/java/io/github/trashemail/Telegram/ForwardMailsToTelegram.java b/src/main/java/io/github/trashemail/Telegram/ForwardMailsToTelegram.java
index dc9c00d..5e7c071 100644
--- a/src/main/java/io/github/trashemail/Telegram/ForwardMailsToTelegram.java
+++ b/src/main/java/io/github/trashemail/Telegram/ForwardMailsToTelegram.java
@@ -3,6 +3,7 @@
import io.github.trashemail.Respositories.UserRepository;
import io.github.trashemail.models.User;
import io.github.trashemail.utils.MailParser;
+import io.github.trashemail.utils.SaveMailToHTMLFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -16,6 +17,8 @@ public class ForwardMailsToTelegram {
private UserRepository userRepository;
@Autowired
private SendTelegramMessage sendTelegramMessage;
+ @Autowired
+ private SaveMailToHTMLFile saveMailToHTMLFile;
private static final Logger log = LoggerFactory.getLogger(
ForwardMailsToTelegram.class);
@@ -25,7 +28,31 @@ public void sendToTelegram(Message message) throws Exception {
User user = userRepository.findByEmailId(emailFor);
MailParser parsedMail = new MailParser(message);
- sendTelegramMessage.sendMessage(parsedMail.toString(),
- Long.toString(user.getChatId()));
+ /*
+ If html content is set, offer to save in file and show html link.
+ */
+ if(parsedMail.getHtmlContentSet()){
+ Object filename = saveMailToHTMLFile.saveToFile(
+ parsedMail.getHtmlContent()
+ );
+
+ if (filename != null)
+ sendTelegramMessage.sendMessage(
+ parsedMail.toString(),
+ Long.toString(user.getChatId()),
+ (String) filename
+ );
+ else {
+ sendTelegramMessage.sendMessage(parsedMail.toString(),
+ Long.toString(
+ user.getChatId()
+ )
+ );
+ }
+ }
+ else {
+ sendTelegramMessage.sendMessage(parsedMail.toString(),
+ Long.toString(user.getChatId()));
+ }
}
}
diff --git a/src/main/java/io/github/trashemail/Telegram/SendTelegramMessage.java b/src/main/java/io/github/trashemail/Telegram/SendTelegramMessage.java
index 724c3c6..931e921 100644
--- a/src/main/java/io/github/trashemail/Telegram/SendTelegramMessage.java
+++ b/src/main/java/io/github/trashemail/Telegram/SendTelegramMessage.java
@@ -3,7 +3,12 @@
import io.github.trashemail.Configurations.TelegramConfig;
import java.util.ArrayList;
+import java.util.List;
+import io.github.trashemail.Configurations.TrashemailConfig;
+import io.github.trashemail.Telegram.DTO.TelegramResponse;
+import io.github.trashemail.Telegram.DTO.messageEntities.InlineKeyboardButton;
+import io.github.trashemail.Telegram.DTO.messageEntities.InlineKeyboardMarkup;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -20,6 +25,8 @@
public class SendTelegramMessage {
@Autowired
private TelegramConfig telegramConfig;
+ @Autowired
+ private TrashemailConfig trashemailConfig;
@Autowired
RestTemplate restTemplate;
@@ -51,8 +58,7 @@ public void sendMessage(String message, String chatId){
data.add("text", split.get(i));
HttpEntity> request =
- new HttpEntity>(data,
- headers);
+ new HttpEntity>(data, headers);
ResponseEntity response = restTemplate.postForEntity(
telegramURI,
@@ -65,5 +71,80 @@ public void sendMessage(String message, String chatId){
else
log.error("Unable to send message to user: " + chatId);
}
+
+ }
+
+ @Async
+ public void sendMessage(String message, String chatId, String filename){
+ String telegramURI = telegramConfig.getUrl() +
+ telegramConfig.getBotToken() +
+ "/sendMessage";
+
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+
+ // Checking the message size and do splitting into chunks if required
+ int maxMessageSize = telegramConfig.getSize();
+ ArrayList split = new ArrayList<>();
+ for (int i = 0; i <= message.length() / maxMessageSize; i++) {
+ split.add(message.substring(i * maxMessageSize,
+ Math.min((i + 1) * maxMessageSize,
+ message.length())));
+ }
+
+ for (int i = 0; i < split.size(); i++) {
+ MultiValueMap data = new LinkedMultiValueMap<>();
+ data.add("chat_id", chatId);
+ data.add("text", split.get(i));
+
+ HttpEntity> request =
+ new HttpEntity>(data, headers);
+
+ ResponseEntity response = restTemplate.postForEntity(
+ telegramURI,
+ request,
+ String.class);
+
+ if(response.getStatusCode() == HttpStatus.OK){
+ log.debug("Message sent to user: " + chatId);
+ }
+ else
+ log.error("Unable to send message to user: " + chatId);
+ }
+
+ // send the response with html button
+ InlineKeyboardMarkup inlineKeyboardMarkup = new InlineKeyboardMarkup();
+
+ InlineKeyboardButton inlineKeyboardButton = new InlineKeyboardButton();
+ inlineKeyboardButton.setText("HTML version");
+ inlineKeyboardButton.setUrl(
+ trashemailConfig.getHostPath() + filename
+ );
+
+ List> inlineKeyboardButtonList =
+ new ArrayList<>();
+
+ inlineKeyboardButtonList.add(new ArrayList<>());
+ inlineKeyboardButtonList.get(0).add(inlineKeyboardButton);
+
+ inlineKeyboardMarkup.setInlineKeyboardButtonList(
+ inlineKeyboardButtonList);
+
+ TelegramResponse telegramResponse = new TelegramResponse(
+ Long.parseLong(chatId),
+ "To view in HTML format click the link below.",
+ inlineKeyboardMarkup
+ );
+
+ ResponseEntity response = restTemplate.postForEntity(
+ telegramURI,
+ telegramResponse,
+ TelegramResponse.class
+ );
+ if(response.getStatusCode() == HttpStatus.OK){
+ log.debug("HTML link sent to user: " + chatId + filename);
+ }
+ else
+ log.error("Unable to HTML Link to user: " + chatId + filename);
}
}
diff --git a/src/main/java/io/github/trashemail/utils/MailParser.java b/src/main/java/io/github/trashemail/utils/MailParser.java
index 9118c05..541c8f9 100644
--- a/src/main/java/io/github/trashemail/utils/MailParser.java
+++ b/src/main/java/io/github/trashemail/utils/MailParser.java
@@ -110,7 +110,6 @@ public String toString() {
this.subject,
this.content
);
-
return mailData;
}
}
diff --git a/src/main/java/io/github/trashemail/utils/SaveMailToHTMLFile.java b/src/main/java/io/github/trashemail/utils/SaveMailToHTMLFile.java
new file mode 100644
index 0000000..2c778fd
--- /dev/null
+++ b/src/main/java/io/github/trashemail/utils/SaveMailToHTMLFile.java
@@ -0,0 +1,40 @@
+package io.github.trashemail.utils;
+
+import io.github.trashemail.Configurations.TrashemailConfig;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.mail.Message;
+import java.io.FileWriter;
+import java.util.UUID;
+
+@Component
+public class SaveMailToHTMLFile {
+ @Autowired
+ TrashemailConfig trashemailConfig;
+
+ private static final Logger log = LoggerFactory.getLogger(
+ SaveMailToHTMLFile.class);
+
+ public Object saveToFile(String htmlContent){
+ try {
+ String filename = UUID.randomUUID().toString() + ".html";
+
+ FileWriter myWriter = new FileWriter(
+ trashemailConfig.getDownloadPath() + filename);
+
+ myWriter.write(htmlContent);
+ myWriter.close();
+
+ log.debug("File written to disk: "+ filename);
+ return filename;
+ }
+ catch (Exception e) {
+ log.error("Unable to save to HTML file. " + e.getMessage());
+ return null;
+ }
+ }
+}