Vylepšený dialog pro odeslání e-mailu. Adresa "Od" se nastavuje podle

přihlášeného uživatele. Přidáno logování chyb při odesílání e-mailu.
multitenant
Josef Rokos 10 years ago
parent 78cf41d2a0
commit 0a98db893a

@ -3,9 +3,13 @@ package info.bukova.isspst.mail;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.InputStreamSource;
import org.springframework.mail.MailAuthenticationException;
import org.springframework.mail.MailParseException;
import org.springframework.mail.MailSendException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.scheduling.annotation.Async;
@ -14,6 +18,8 @@ public class MailerWithAttachement implements Mailer {
private JavaMailSender sender;
private String from;
private boolean overrideFrom = false;
private static final Logger logger = LoggerFactory.getLogger(MailerWithAttachement.class);
public MailerWithAttachement(JavaMailSender sender) {
this.sender = sender;
@ -27,7 +33,9 @@ public class MailerWithAttachement implements Mailer {
try {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
if (message.getFrom() == null || message.getFrom().isEmpty()) {
message.setReplyTo(message.getFrom());
if (message.getFrom() == null || message.getFrom().isEmpty() || overrideFrom) {
if (from == null || from.isEmpty()) {
message.setFrom("tomcat@is.bukova.info");
} else {
@ -36,9 +44,15 @@ public class MailerWithAttachement implements Mailer {
}
helper.setFrom(message.getFrom());
helper.setReplyTo(message.getReplyTo());
helper.setTo(message.getTo());
helper.setSubject(message.getSubject());
helper.setText(message.getText(), message.isHtml());
if (message.getText() != null) {
helper.setText(message.getText(), message.isHtml());
} else {
helper.setText("", message.isHtml());
}
if (message.getAttachementData() != null) {
InputStreamSource source = new ByteArrayResource(message.getAttachementData());
@ -47,11 +61,22 @@ public class MailerWithAttachement implements Mailer {
} catch (MessagingException e) {
throw new MailParseException(e);
}
sender.send(mimeMessage);
try {
sender.send(mimeMessage);
} catch (MailAuthenticationException e) {
logger.error("Authentication error");
} catch (MailSendException e) {
logger.error("Mail send error: " + e.getMessage());
}
}
public void setFrom(String from) {
this.from = from;
}
public void setOverrideFrom(boolean override) {
this.overrideFrom = override;
}
}

@ -232,6 +232,7 @@ public abstract class RequirementBaseServiceImpl<T extends RequirementBase> exte
}
if (message != null) {
message.setFrom(getLoggedInUser().getEmail());
message.setTo(e.getOwnedBy().getEmail());
mailer.send(message);
}

@ -1,15 +1,29 @@
package info.bukova.isspst.ui.mail;
import static ch.lambdaj.Lambda.filter;
import static ch.lambdaj.Lambda.having;
import static ch.lambdaj.Lambda.on;
import static org.hamcrest.Matchers.startsWith;
import info.bukova.isspst.data.Address;
import info.bukova.isspst.data.Member;
import info.bukova.isspst.data.User;
import info.bukova.isspst.mail.MailMessage;
import info.bukova.isspst.mail.Mailer;
import info.bukova.isspst.reporting.Generator;
import info.bukova.isspst.reporting.GeneratorFactory;
import info.bukova.isspst.reporting.ReportDefinition;
import info.bukova.isspst.services.addressbook.AdbService;
import info.bukova.isspst.services.users.UserService;
import java.util.ArrayList;
import java.util.List;
import org.springframework.security.access.AccessDeniedException;
import org.zkoss.bind.annotation.BindingParam;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.ExecutionArgParam;
import org.zkoss.bind.annotation.Init;
import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zk.ui.select.annotation.WireVariable;
import org.zkoss.zul.Window;
@ -21,10 +35,22 @@ public class MailForm {
private ReportDefinition reportDefinition;
@WireVariable
private GeneratorFactory genFactory;
@WireVariable
private UserService userService;
@WireVariable
private AdbService adbService;
private MailMessage message;
private String to;
private String cc;
private String bcc;
private String attachement;
private boolean report;
private List<Address> addressbook;
private List<User> users;
private List<Address> selectedAddresses;
private List<User> selectedUsers;
private int adbType;
private String findAddress;
@Init
public void init(@ExecutionArgParam("report") Boolean report) {
@ -34,11 +60,37 @@ public class MailForm {
if (report) {
attachement = "report.pdf";
}
try {
addressbook = adbService.getAll();
} catch (AccessDeniedException e) {
addressbook = new ArrayList<Address>();
}
users = userService.getAll();
selectedAddresses = new ArrayList<Address>();
selectedUsers = new ArrayList<User>();
to = "";
cc = "";
bcc = "";
}
@Command
public void send(@BindingParam("window") Window window) {
message.setTo(to);
message.setTo(to.split(";"));
if (cc != null && !cc.isEmpty()) {
message.setCc(cc.split(";"));
}
if (bcc != null && !bcc.isEmpty()) {
message.setCc(bcc.split(";"));
}
message.setFrom(userService.getCurrent().getEmail());
if (report) {
Generator generator = genFactory.createGenerator(reportDefinition);
message.setAttachementData(generator.generate());
@ -49,6 +101,76 @@ public class MailForm {
mailer.send(message);
window.detach();
}
@Command
@NotifyChange("to")
public void addTo() {
to = appendAddress(to, selAddrs());
}
@Command
@NotifyChange("cc")
public void addCc() {
cc = appendAddress(cc, selAddrs());
}
@Command
@NotifyChange("bcc")
public void addBcc() {
bcc = appendAddress(bcc, selAddrs());
}
@Command
@NotifyChange({"selectedAddresses", "selectedUsers"})
public void find() {
if (adbType == 0) {
List<User> found = filter(having(on(Member.class).getFullName(), startsWith(findAddress)), users);
if (!found.isEmpty()) {
selectedUsers.clear();
if (!findAddress.isEmpty() && found.get(0).getEmail() != null && !found.get(0).getEmail().isEmpty()) {
selectedUsers.add(found.get(0));
}
}
} else {
List<Address> found = filter(having(on(Address.class).getCompany(), startsWith(findAddress)), addressbook);
if (!found.isEmpty()) {
selectedAddresses.clear();
if (!findAddress.isEmpty() && found.get(0).getEmail() != null && !found.get(0).getEmail().isEmpty()) {
selectedAddresses.add(found.get(0));
}
}
}
}
private String appendAddress(String field, List<String> addrs) {
for (String addr : addrs) {
if (field.isEmpty()) {
field = addr;
} else {
field += "; " + addr;
}
}
return field;
}
private List<String> selAddrs() {
List<String> ret = new ArrayList<String>();
if (adbType == 1) {
for (Address addr : selectedAddresses) {
ret.add(addr.getCompany() + " <" + addr.getEmail() + ">");
}
} else {
for (User u : selectedUsers) {
ret.add(u.getFullName() + " <" + u.getEmail() + ">");
}
}
return ret;
}
public MailMessage getMessage() {
return message;
@ -70,4 +192,60 @@ public class MailForm {
return attachement;
}
public String getCc() {
return cc;
}
public void setCc(String cc) {
this.cc = cc;
}
public String getBcc() {
return bcc;
}
public void setBcc(String bcc) {
this.bcc = bcc;
}
public List<Address> getAddressbook() {
return addressbook;
}
public List<User> getUsers() {
return users;
}
public int getAdbType() {
return adbType;
}
public void setAdbType(int adbType) {
this.adbType = adbType;
}
public List<Address> getSelectedAddresses() {
return selectedAddresses;
}
public void setSelectedAddresses(List<Address> selectedAddresses) {
this.selectedAddresses = selectedAddresses;
}
public List<User> getSelectedUsers() {
return selectedUsers;
}
public void setSelectedUsers(List<User> selectedUsers) {
this.selectedUsers = selectedUsers;
}
public String getFindAddress() {
return findAddress;
}
public void setFindAddress(String findAddress) {
this.findAddress = findAddress;
}
}

@ -237,9 +237,20 @@ ReportNoOptions=Žádná nestavení
MailForm=Odeslání e-mailu
MailFor=Komu:
MailCc=Kopie:
MailBcc=Skrytá:
MailSubject=Předmět:
MailSend=Odeslat
MailAttachement=Příloha:
MailAddressBook=Adresář:
MailUsers=Uživatelé
MailSuppliers=Dodavatelé
MailName=Jméno
MailCompany=Firma
MailToButton=Komu ->
MailCcButton=Kopie ->
MailBccButton=Skrytá ->
Error=Chyba
ErrorRights=K vykobání této operace nemáte dostatečná oprávnění
@ -258,7 +269,6 @@ false=Ne
Information=Informace
Requirements=Požadavky
Orders=Objednávky
MaterialRequirement=Požadavek na materiál
@ -270,7 +280,6 @@ ApprovedRequirementItems=Schválené položky požadavků
CurrentRequirements=Aktuální požadavky
ApprovedOrders=Schválené objednávky
BussinessTrips=Služební cesty
TravelOrders=Cestovní příkazy
Lists=Seznamy
Settings=Nastavení
Administration=Administrace

@ -1,7 +1,8 @@
mail.from=kosef.rokos@gmail.com
mail.from=josef.rokos@gmail.com
mail.host=smtp.gmail.com
mail.port=587
mail.useauth=true
mail.usessl=true
mail.username=josef.rokos@gmail.com
mail.password=XXXXXX
mail.password=XXXXXXXX
mail.overrideFrom=false

@ -20,6 +20,7 @@
<bean id="mailer" class="info.bukova.isspst.mail.MailerWithAttachement">
<constructor-arg ref="mailSender"/>
<property name="from" value="${mail.from}"/>
<property name="overrideFrom" value="${mail.overrideFrom}"/>
</bean>
<bean id="simpleMailer" class="info.bukova.isspst.mail.SimpleMailer">

@ -2,30 +2,81 @@
<zk>
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
<window id="mailWin" border="normal" apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('info.bukova.isspst.ui.mail.MailForm')" width="500px" closable="true">
viewModel="@id('vm') @init('info.bukova.isspst.ui.mail.MailForm')" width="800px" closable="true">
<caption zclass="form-caption" label="${labels.MailForm}" />
<grid>
<columns>
<column hflex="min"/>
<column/>
</columns>
<rows>
<row>
<label value="${labels.MailFor}"/> <textbox value="@bind(vm.to)" width="100%"/>
</row>
<row>
<label value="${labels.MailSubject }"/> <textbox value="@bind(vm.message.subject)" width="100%"/>
</row>
<row>
<label value="${labels.MailAttachement}"/> <textbox value="@load(vm.attachement)" readonly="true" width="100%"/>
</row>
</rows>
</grid>
<vbox>
<ckeditor width="470px" height="200px" value="@bind(vm.message.text)" toolbar="Basic"/>
<hbox>
<button label="${labels.MailSend}" onClick="@command('send', window=mailWin)"/> <button label="${labels.ButtonStorno}" onClick="mailWin.detach()"/>
</hbox>
</vbox>
<hbox>
<vbox hflex="2">
<hbox>
<label value="${labels.MailAddressBook}"/>
<combobox selectedIndex="@bind(vm.adbType)" readonly="true">
<comboitem label="${labels.MailUsers}"/>
<comboitem label="${labels.MailSuppliers}"/>
</combobox>
</hbox>
<textbox value="@bind(vm.findAddress)" instant="true" onChange="@command('find')" width="100%"/>
<listbox model="@load(vm.users)"
visible="@load(vm.adbType eq 0)"
multiple="true"
selectedItems="@bind(vm.selectedUsers)"
height="350px">
<listhead>
<listheader label="${labels.MailName}"/>
</listhead>
<template name="model">
<listitem disabled="@load(empty each.email)" draggable="true">
<listcell label="@load(each.fullName)"/>
</listitem>
</template>
</listbox>
<listbox model="@load(vm.addressbook)"
visible="@load(vm.adbType eq 1)"
multiple="true"
selectedItems="@bind(vm.selectedAddresses)"
height="350px">
<listhead>
<listheader label="${labels.MailCompany}"/>
</listhead>
<template name="model">
<listitem disabled="@load(empty each.email)" draggable="true">
<listcell label="@load(each.company)"/>
</listitem>
</template>
</listbox>
<button label="${labels.MailToButton}" width="90%" sclass="nicebutton" onClick="@command('addTo')"/>
<button label="${labels.MailCcButton}" width="90%" sclass="nicebutton" onClick="@command('addCc')"/>
<button label="${labels.MailBccButton}" width="90%" sclass="nicebutton" onClick="@command('addBcc')"/>
</vbox>
<vbox hflex="5">
<grid>
<columns>
<column hflex="min"/>
<column/>
</columns>
<rows>
<row>
<label value="${labels.MailFor}"/> <textbox value="@bind(vm.to)" width="100%" droppable="true" onDrop="@command('addTo')"/>
</row>
<row>
<label value="${labels.MailCc}"/> <textbox value="@bind(vm.cc)" width="100%" droppable="true" onDrop="@command('addCc')"/>
</row>
<row>
<label value="${labels.MailBcc}"/> <textbox value="@bind(vm.bcc)" width="100%" droppable="true" onDrop="@command('addBcc')"/>
</row>
<row>
<label value="${labels.MailSubject }"/> <textbox value="@bind(vm.message.subject)" width="100%"/>
</row>
<row>
<label value="${labels.MailAttachement}"/> <textbox value="@load(vm.attachement)" readonly="true" width="100%"/>
</row>
</rows>
</grid>
<vbox>
<ckeditor width="540px" height="250px" value="@bind(vm.message.text)" toolbar="Basic"/>
<hbox>
<button label="${labels.MailSend}" onClick="@command('send', window=mailWin)" disabled="@load(empty vm.to)" sclass="nicebutton"/> <button label="${labels.ButtonStorno}" onClick="mailWin.detach()" sclass="nicebutton"/>
</hbox>
</vbox>
</vbox>
</hbox>
</window>
</zk>
Loading…
Cancel
Save