Skip to content
Snippets Groups Projects
Commit 650f6155 authored by srosse's avatar srosse
Browse files

Merge OpenOLAT 11.2 to OpenOLAT default branch with 7ff2fe46e5b4f661f291c920e47aa7e1f9e572b9

parents dbd455e1 53e92d00
No related branches found
No related tags found
No related merge requests found
Showing
with 230 additions and 221 deletions
......@@ -28,6 +28,8 @@ package org.olat.core.util.mail;
import java.util.ArrayList;
import java.util.List;
import javax.mail.Address;
import org.olat.core.id.Identity;
/**
......@@ -49,7 +51,9 @@ public class MailerResult {
public static final int TEMPLATE_GENERAL_ERROR = 6;
public static final int ATTACHMENT_INVALID = 7;
private final List<Identity> failedIdentites = new ArrayList<Identity>();
private final List<String> invalidAddresses = new ArrayList<>();
private final List<Identity> failedIdentites = new ArrayList<>();
private int returnCode = OK;
/**
......@@ -80,6 +84,18 @@ public class MailerResult {
public void addFailedIdentites(Identity failedIdentity) {
this.failedIdentites.add(failedIdentity);
}
public List<String> getInvalidAddresses() {
return invalidAddresses;
}
public void addInvalidAddresses(Address[] addresses) {
if(addresses != null && addresses.length > 0) {
for(Address address:addresses) {
invalidAddresses.add(address.toString());
}
}
}
/**
* Package helper to set the return code.
......@@ -97,6 +113,9 @@ public class MailerResult {
if(newResult.getFailedIdentites() != null && newResult.getFailedIdentites().size() > 0) {
failedIdentites.addAll(newResult.getFailedIdentites());
}
if(newResult.getInvalidAddresses() != null && newResult.getInvalidAddresses().size() > 0) {
invalidAddresses.addAll(newResult.getInvalidAddresses());
}
}
@Override
......
......@@ -35,6 +35,7 @@ import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.zip.Adler32;
......@@ -48,6 +49,7 @@ import javax.mail.BodyPart;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.SendFailedException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
......@@ -872,6 +874,9 @@ public class MailManagerImpl implements MailManager, InitializingBean {
MimeMessage mail = createMimeMessage(fromId, from, toId, to, cc, bccLists, content, result);
if(mail != null) {
sendMessage(mail, result);
if(result != null && !result.isSuccessful()) {
handleErrors(result, fromId, toId, cc, bccLists);
}
}
return result;
}
......@@ -1060,6 +1065,9 @@ public class MailManagerImpl implements MailManager, InitializingBean {
//check that we send an email to someone
if(!toAddress.isEmpty() || !ccAddress.isEmpty() || !bccAddress.isEmpty()) {
sendRealMessage(fromAddress, toAddress, ccAddress, bccAddress, subject, body, attachments, result);
if(result != null && !result.isSuccessful()) {
handleErrors(result, fromId, toId, cc, bccLists);
}
}
}
......@@ -1080,6 +1088,83 @@ public class MailManagerImpl implements MailManager, InitializingBean {
}
}
/**
* Basically try to find compare the list of invalid addresses return by the mail server
* with the different recipients (in the form of Identity) of the mail.
*
* @param result The result which contains the invalid addresses
* @param fromId A recipient of the mail (optional can be null)
* @param toId A recipient of the mail (optional can be null)
* @param cc A recipient of the mail (optional can be null)
* @param bccLists A list of contact list of the mail (optional can be null or empty)
*/
private void handleErrors(MailerResult result, Identity fromId, Identity toId, Identity cc, List<ContactList> bccLists) {
if(result == null) return;
List<String> invalidAddresses = result.getInvalidAddresses();
if(invalidAddresses.size() > 0) {
if(match(fromId, invalidAddresses, true)) {
result.addFailedIdentites(fromId);
}
if(match(toId, invalidAddresses, true)) {
result.addFailedIdentites(fromId);
}
if(match(cc, invalidAddresses, true)) {
result.addFailedIdentites(fromId);
}
if(bccLists != null && bccLists.size() > 0) {
for(ContactList bccList:bccLists) {
Map<String,Identity> emailToIdentityMap = bccList.getIdentiEmails();
for(Map.Entry<String,Identity> entry:emailToIdentityMap.entrySet()) {
if(match(entry.getKey(), invalidAddresses, true)) {
result.addFailedIdentites(entry.getValue());
}
}
}
}
}
}
/**
* Try to find the email or institutional email address of the identity in
* the list of addresses.
*
* @param identity The identity
* @param invalidAddresses The list of addresses to compare with
* @param removeMatch if true, the matched address will be removed of the list
* @return true if found
*/
private boolean match(Identity identity, List<String> invalidAddresses, boolean removeMatch) {
boolean match = false;
if(identity != null) {
match |= match(identity.getUser().getEmail(), invalidAddresses, removeMatch);
match |= match(identity.getUser().getProperty(UserConstants.INSTITUTIONALEMAIL, null), invalidAddresses, removeMatch);
}
return match;
}
/**
* Try to find the email address the list of addresses.
*
* @param identity The email to compare
* @param invalidAddresses The list of addresses to compare with
* @param removeMatch if true, the matched address will be removed of the list
* @return true if found
*/
private boolean match(String email, List<String> invalidAddresses, boolean removeMatch) {
if(StringHelper.containsNonWhitespace(email) && invalidAddresses != null) {
for(String invalidAddress:invalidAddresses) {
if(email.toLowerCase().contains(invalidAddress.toLowerCase())) {
if(removeMatch) {
invalidAddresses.remove(invalidAddress);
}
return true;
}
}
}
return false;
}
private void appendRecipients(DBMailImpl mail, List<ContactList> ccLists, List<Address> toAddress, List<Address> ccAddress,
boolean visible, boolean makeRealMail, MailerResult result) throws AddressException {
......@@ -1473,6 +1558,7 @@ public class MailManagerImpl implements MailManager, InitializingBean {
p.put("mail.smtp.starttls.enable", "true");
p.put("mail.smtp.ssl.trust", mailhost);
}
p.put("mail.smtp.sendpartial", Boolean.TRUE);
Session mailSession;
if (smtpAuth == null) {
......@@ -1628,6 +1714,11 @@ public class MailManagerImpl implements MailManager, InitializingBean {
} else {
result.setReturnCode(MailerResult.MAILHOST_UNDEFINED);
}
} catch(SendFailedException e) {
result.setReturnCode(MailerResult.RECIPIENT_ADDRESS_ERROR);
result.addInvalidAddresses(e.getInvalidAddresses());
result.addInvalidAddresses(e.getValidUnsentAddresses());
log.warn("Could not send mail", e);
} catch (MessagingException e) {
result.setReturnCode(MailerResult.SEND_GENERAL_ERROR);
log.warn("Could not send mail", e);
......@@ -1637,18 +1728,32 @@ public class MailManagerImpl implements MailManager, InitializingBean {
private void logMessage(MimeMessage msg) throws MessagingException {
try {
log.info("E-mail send: " + msg.getSubject());
logRecipients(msg, RecipientType.TO);
logRecipients(msg, RecipientType.BCC);
logRecipients(msg, RecipientType.CC);
log.info("Content : " + msg.getContent());
//File file = new File("/HotCoffee/tmp/mail_" + CodeHelper.getForeverUniqueID() + ".msg");
//OutputStream os = new FileOutputStream(file);
//msg.writeTo(os);
//IOUtils.closeQuietly(os);
} catch (IOException e) {
log.error("", e);
}
}
private void logRecipients(MimeMessage msg, RecipientType type) throws MessagingException {
Address[] recipients = msg.getRecipients(type);
if(recipients != null && recipients.length > 0) {
StringBuilder sb = new StringBuilder();
for(Address recipient:recipients) {
if(sb.length() > 0) sb.append(", ");
sb.append(recipient.toString());
}
log.info(type + " : " + sb);
}
}
private static class VFSDataSource implements DataSource {
private final String name;
......
......@@ -29,12 +29,6 @@ import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.mail.Address;
import javax.mail.AuthenticationFailedException;
import javax.mail.MessagingException;
import javax.mail.SendFailedException;
import org.olat.core.CoreSpringFactory;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.control.Controller;
......@@ -45,11 +39,8 @@ import org.olat.core.gui.control.generic.messages.MessageUIFactory;
import org.olat.core.gui.control.generic.modal.DialogBoxController;
import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
import org.olat.core.id.Identity;
import org.olat.core.logging.OLATRuntimeException;
import org.olat.core.logging.OLog;
import org.olat.core.logging.Tracing;
import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
import org.olat.core.util.WebappHelper;
import org.olat.core.util.StringHelper;
import org.olat.core.util.mail.ContactList;
import org.olat.core.util.mail.ContactMessage;
import org.olat.core.util.mail.MailBundle;
......@@ -59,6 +50,8 @@ import org.olat.core.util.mail.MailHelper;
import org.olat.core.util.mail.MailLoggingAction;
import org.olat.core.util.mail.MailManager;
import org.olat.core.util.mail.MailerResult;
import org.olat.user.UserManager;
import org.springframework.beans.factory.annotation.Autowired;
/**
* <b>Fires Event: </b>
......@@ -92,22 +85,23 @@ import org.olat.core.util.mail.MailerResult;
* <LI>contact messages with pre-initialized subject and/or body</LI>
* </UL>
* <P>
* TODO:pb:b refactor ContactFormController and ContactForm to extract a ContactMessageManager,
* setSubject(..) setRecipients.. etc. should not be in the controller. Refactor to use ContactMessage!
* @see org.olat.modules.co.ContactList
* Initial Date: Jul 19, 2004
* @author patrick
*/
public class ContactFormController extends BasicController {
private static final OLog log = Tracing.createLoggerFor(ContactFormController.class);
//
private Identity emailFrom;
private ContactForm cntctForm;
private DialogBoxController noUsersErrorCtr;
private ArrayList<String> myButtons;
private List<String> myButtons;
@Autowired
private MailManager mailService;
@Autowired
private UserManager userManager;
/**
*
* @param ureq
......@@ -122,8 +116,7 @@ public class ContactFormController extends BasicController {
super(ureq, windowControl);
//init email form
this.emailFrom = cmsg.getFrom();
mailService = CoreSpringFactory.getImpl(MailManager.class);
emailFrom = cmsg.getFrom();
cntctForm = new ContactForm(ureq, windowControl, emailFrom, isReadonly,isCanceable,hasRecipientsEditable);
listenTo(cntctForm);
......@@ -183,6 +176,7 @@ public class ContactFormController extends BasicController {
* @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
* org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
*/
@Override
public void event(UserRequest ureq, Controller source, Event event) {
if (source == noUsersErrorCtr) {
if(event.equals(Event.CANCELLED_EVENT)) {
......@@ -196,212 +190,103 @@ public class ContactFormController extends BasicController {
fireEvent(ureq, Event.CANCELLED_EVENT);
}
}
}
else if (source == cntctForm) {
} else if (source == cntctForm) {
if (event == Event.DONE_EVENT) {
//
boolean success = false;
try {
File[] attachments = cntctForm.getAttachments();
MailContext context = new MailContextImpl(getWindowControl().getBusinessControl().getAsString());
MailBundle bundle = new MailBundle();
bundle.setContext(context);
if (emailFrom == null) {
// in case the user provides his own email in form
bundle.setFrom(cntctForm.getEmailFrom());
} else {
bundle.setFromId(emailFrom);
}
bundle.setContactLists(cntctForm.getEmailToContactLists());
bundle.setContent(cntctForm.getSubject(), cntctForm.getBody(), attachments);
MailerResult result = mailService.sendMessage(bundle);
success = result.isSuccessful();
if(cntctForm.isTcpFrom()) {
MailBundle ccBundle = new MailBundle();
ccBundle.setContext(context);
if (emailFrom == null) {
// in case the user provides his own email in form
ccBundle.setFrom(cntctForm.getEmailFrom());
ccBundle.setTo(cntctForm.getEmailFrom());
} else {
ccBundle.setFromId(emailFrom);
ccBundle.setCc(emailFrom);
}
ccBundle.setContent(cntctForm.getSubject(), cntctForm.getBody(), attachments);
MailerResult ccResult = mailService.sendMessage(ccBundle);
success = ccResult.isSuccessful();
}
} catch (Exception e) {
//error in recipient email address(es)
handleAddressException(success);
doSend(ureq);
} else if (event == Event.CANCELLED_EVENT) {
fireEvent(ureq, Event.CANCELLED_EVENT);
}
}
}
private void doSend(UserRequest ureq) {
MailerResult result;
try {
File[] attachments = cntctForm.getAttachments();
MailContext context = new MailContextImpl(getWindowControl().getBusinessControl().getAsString());
MailBundle bundle = new MailBundle();
bundle.setContext(context);
if (emailFrom == null) {
// in case the user provides his own email in form
bundle.setFrom(cntctForm.getEmailFrom());
} else {
bundle.setFromId(emailFrom);
}
bundle.setContactLists(cntctForm.getEmailToContactLists());
bundle.setContent(cntctForm.getSubject(), cntctForm.getBody(), attachments);
result = mailService.sendMessage(bundle);
if(cntctForm.isTcpFrom()) {
MailBundle ccBundle = new MailBundle();
ccBundle.setContext(context);
if (emailFrom == null) {
// in case the user provides his own email in form
ccBundle.setFrom(cntctForm.getEmailFrom());
ccBundle.setTo(cntctForm.getEmailFrom());
} else {
ccBundle.setFromId(emailFrom);
ccBundle.setCc(emailFrom);
}
cntctForm.setDisplayOnly(true);
if (success) {
ccBundle.setContent(cntctForm.getSubject(), cntctForm.getBody(), attachments);
MailerResult ccResult = mailService.sendMessage(ccBundle);
result.append(ccResult);
}
if(result != null) {
if (result.isSuccessful()) {
showInfo("msg.send.ok");
// do logging
ThreadLocalUserActivityLogger.log(MailLoggingAction.MAIL_SENT, getClass());
fireEvent(ureq, Event.DONE_EVENT);
} else {
showInfo("error.msg.send.nok");
showError(result);
fireEvent(ureq, Event.FAILED_EVENT);
}
} else if (event == Event.CANCELLED_EVENT) {
fireEvent(ureq, Event.CANCELLED_EVENT);
}
} catch (Exception e) {
logError("", e);
showWarning("error.msg.send.nok");
}
cntctForm.setDisplayOnly(true);
}
private void showError(MailerResult result) {
StringBuilder error = new StringBuilder(1024);
error.append(translate("error.msg.send.nok"));
if(result != null && (result.getFailedIdentites().size() > 0 || result.getInvalidAddresses().size() > 0)) {
error.append("<br />");
/**
* handles events from Components <BR>
* creates an InfoMessage in the WindowController on error. <br>
* <b>Fires: </b>
* <UL>
* <LI><b>Event.DONE_EVENT: </B> <BR>
* email was sent successfully by the underlying Email subsystem</LI>
* <LI><b>Event.FAILED_EVENT: </B> <BR>
* email was not sent correct by the underlying Email subsystem <BR>
* email may be partially sent correct, but some parts failed.</LI>
* <LI><b>Event.CANCELLED_EVENT: </B> <BR>
* user interaction, i.e. canceled message creation</LI>
* </UL>
* <p>
*
* @param ureq
* @param source
* @param event
*/
public void event(UserRequest ureq, Component source, Event event) {
//
}
/**
* @param success
*/
private void handleAddressException(boolean success) {
StringBuilder errorMessage = new StringBuilder();
if (success) {
errorMessage.append(translate("error.msg.send.partially.nok"));
errorMessage.append("<br />");
errorMessage.append(translate("error.msg.send.invalid.rcps"));
} else {
errorMessage.append(translate("error.msg.send.nok"));
errorMessage.append("<br />");
errorMessage.append(translate("error.msg.send.553"));
}
this.getWindowControl().setError(errorMessage.toString());
}
/**
* handles the sendFailedException <p>generates an infoMessage
*
* @param e
* @throws OLATRuntimeException
* return boolean true: handling was successful, exception can be ignored;
* false: handling was not successful, refuse to proceed.
*/
public boolean handleSendFailedException(SendFailedException e) {
//get wrapped excpetion
MessagingException me = (MessagingException) e.getNextException();
if (me instanceof AuthenticationFailedException) {
// catch this one separately, this kind of exception has no message
// as the other below
StringBuilder infoMessage = new StringBuilder();
infoMessage.append(translate("error.msg.send.nok"));
infoMessage.append("<br />");
infoMessage.append(translate("error.msg.smtp.authentication.failed"));
this.getWindowControl().setInfo(infoMessage.toString());
log.warn("Mail message could not be sent: ", e);
// message could not be sent, however let user proceed with his action
return true;
}
String message = me.getMessage();
if (message.startsWith("553")) {
//javax.mail.MessagingException: 553 5.5.4 <invalid>... Domain name
// required for sender address invalid@id.unizh.ch
//javax.mail.MessagingException: 553 5.1.8 <invalid@invalid.>...
// Domain of sender address invalid@invalid does not exist
//...
StringBuilder infoMessage = new StringBuilder();
infoMessage.append(translate("error.msg.send.553"));
showInfo(infoMessage.toString());
} else if (message.startsWith("Invalid Addresses")) {
// javax.mail.SendFailedException: Sending failed;
// nested exception is:
// class javax.mail.SendFailedException: Invalid Addresses;
// nested exception is:
// class javax.mail.SendFailedException: 550 5.1.1 <dfgh>... User
// unknownhandleSendFailedException
StringBuilder infoMessage = new StringBuilder();
infoMessage.append(translate("error.msg.send.nok"));
infoMessage.append("<br />");
infoMessage.append(translate("error.msg.send.invalid.rcps"));
infoMessage.append(addressesArr2HtmlOList(e.getInvalidAddresses()));
this.getWindowControl().setInfo(infoMessage.toString());
} else if (message.startsWith("503 5.0.0")) {
// message:503 5.0.0 Need RCPT (recipient) ,javax.mail.MessagingException
StringBuilder infoMessage = new StringBuilder();
infoMessage.append(translate("error.msg.send.nok"));
infoMessage.append("<br />");
infoMessage.append(translate("error.msg.send.no.rcps"));
this.getWindowControl().setInfo(infoMessage.toString());
} else if (message.startsWith("Unknown SMTP host")) {
StringBuilder infoMessage = new StringBuilder();
infoMessage.append(translate("error.msg.send.nok"));
infoMessage.append("<br />");
infoMessage.append(translate("error.msg.unknown.smtp", WebappHelper.getMailConfig("mailFrom")));
this.getWindowControl().setInfo(infoMessage.toString());
log.warn("Mail message could not be sent: ", e);
// message could not be sent, however let user proceed with his action
return true;
} else if (message.startsWith("Could not connect to SMTP host")){
//could not connect to smtp host, no connection or connection timeout
StringBuilder infoMessage = new StringBuilder();
infoMessage.append(translate("error.msg.send.nok"));
infoMessage.append("<br />");
infoMessage.append(translate("error.msg.notconnectto.smtp", WebappHelper.getMailConfig("mailhost")));
this.getWindowControl().setInfo(infoMessage.toString());
log.warn(null, e);
// message could not be sent, however let user proceed with his action
return true;
}
else {
throw new OLATRuntimeException(ContactFormController.class, "" + cntctForm.getEmailTo(), e.getNextException());
}
// message could not be sent, return false
return false;
}
/**
* converts an Address[] to an HTML ordered list
*
* @param invalidAdr Address[] with invalid addresses
* @return StringBuilder
*/
private StringBuilder addressesArr2HtmlOList(Address[] invalidAdr) {
StringBuilder iAddressesSB = new StringBuilder();
if (invalidAdr != null && invalidAdr.length > 0) {
iAddressesSB.append("<ol>");
for (int i = 0; i < invalidAdr.length; i++) {
iAddressesSB.append("<li>");
iAddressesSB.append(invalidAdr[i].toString());
iAddressesSB.append("</li>");
StringBuilder ids = new StringBuilder(1024);
for(Identity identity:result.getFailedIdentites()) {
if(ids.length() > 0) ids.append(", ");
String fullname = userManager.getUserDisplayName(identity);
if(StringHelper.containsNonWhitespace(fullname)) {
ids.append(fullname);
}
}
for(String invalidAddress:result.getInvalidAddresses()) {
if(ids.length() > 0) ids.append(", ");
ids.append(invalidAddress);
}
iAddressesSB.append("</ol>");
error.append(translate("error.msg.send.invalid.rcps", new String[]{ ids.toString() }));
}
return iAddressesSB;
getWindowControl().setError(error.toString());
}
@Override
public void event(UserRequest ureq, Component source, Event event) {
//
}
/**
* @see org.olat.core.gui.control.DefaultController#doDispose(boolean)
*/
@Override
protected void doDispose() {
//
}
}
\ No newline at end of file
......@@ -13,7 +13,7 @@ error.msg.content.nok=\u0631\u0633\u0627\u0644\u062A\u0643 \u0623\u0648 \u0645\u
error.msg.notconnectto.smtp=\u0644\u0627 \u064A\u0645\u0643\u0646 \u062A\u0643\u0648\u064A\u0646\u0647. <i>{0}</i> SMTP \u0627\u0644\u062A\u0648\u0635\u064A\u0644 \u0628\u0633\u064A\u0631\u0641\u0631
error.msg.nousers=\u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u062D\u062F\u062F\u0629 \u0644\u0627 \u064A\u0648\u062C\u062F \u0628\u0647\u0627 \u0645\u0634\u0627\u0631\u0643\u064A\u0646\u060C \u0631\u0633\u0627\u0644\u062A\u0643 \u0627\u0644\u0628\u0631\u064A\u062F\u064A\u0629 \u0644\u0627 \u064A\u0645\u0643\u0646 \u0625\u0631\u0633\u0627\u0644\u0647\u0627.
error.msg.send.553=\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0645\u0631\u0633\u0644 \u0648/\u0623\u0648 \u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0645\u0633\u062A\u0644\u0645 \u063A\u064A\u0631 \u0635\u062D\u064A\u062D.
error.msg.send.invalid.rcps=\:\u062A\u062D\u0642\u0642 \u0645\u0646 \u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0645\u0633\u062A\u0644\u0645
error.msg.send.invalid.rcps=\:\u062A\u062D\u0642\u0642 \u0645\u0646 \u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0645\u0633\u062A\u0644\u0645 {0}
error.msg.send.no.rcps=\u0644\u0645 \u064A\u062A\u0645 \u062A\u062D\u062F\u064A\u062F \u0639\u0646\u0627\u0648\u064A\u0646 \u0627\u0644\u0645\u0633\u062A\u0644\u0645\u064A\u0646.
error.msg.send.nok=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0631\u0633\u0627\u0644\u0629.
error.msg.send.partially.nok=\u064A\u0645\u0643\u0646 \u0623\u0646 \u062A\u0631\u0633\u0644 \u0631\u0633\u0627\u0644\u062A\u0643 \u062C\u0632\u0626\u064A\u0627\u064B \u0641\u0642\u0637.
......
......@@ -11,7 +11,7 @@ error.msg.content.nok=\u0412\u0430\u0448\u0435\u0442\u043E \u0441\u044A\u043E\u0
error.msg.notconnectto.smtp=\u0412\u0440\u044A\u0437\u043A\u0430\u0442\u0430 \u0441 SMTP \u0441\u044A\u0440\u0432\u044A\u0440\u0430 <i>{0}</i> \u043D\u0435 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0431\u044A\u0434\u0435 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0435\u043D\u0430.
error.msg.nousers=\u0418\u0437\u0431\u0440\u0430\u043D\u0430\u0442\u0430 \u0433\u0440\u0443\u043F\u0430 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u0435\u043B\u0438 \u043D\u044F\u043C\u0430 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u0446\u0438. \u0412\u0430\u0448\u0438\u044F\u0442 \u0438-\u043C\u0435\u0439\u043B \u043D\u0435 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0431\u044A\u0434\u0435 \u0438\u0437\u043F\u0440\u0430\u0442\u0435\u043D.
error.msg.send.553=\u0410\u0434\u0440\u0435\u0441\u044A\u0442 \u043D\u0430 \u043F\u043E\u0434\u0430\u0442\u0435\u043B\u044F \u0438/\u0438\u043B\u0438 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u0435\u043B\u044F \u0435 \u0433\u0440\u0435\u0448\u0435\u043D.
error.msg.send.invalid.rcps=\u041F\u0440\u043E\u0432\u0435\u0440\u0435\u0442\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 (\u0430\u0434\u0440\u0435\u0441\u0438\u0442\u0435) \u043D\u0430 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u0435\u043B\u044F (\u043F\u043E\u043B\u0443\u0447\u0430\u0442\u0435\u043B\u0438\u0442\u0435)\:
error.msg.send.invalid.rcps=\u041F\u0440\u043E\u0432\u0435\u0440\u0435\u0442\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 (\u0430\u0434\u0440\u0435\u0441\u0438\u0442\u0435) \u043D\u0430 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u0435\u043B\u044F (\u043F\u043E\u043B\u0443\u0447\u0430\u0442\u0435\u043B\u0438\u0442\u0435)\: {0}
error.msg.send.no.rcps=\u041D\u0435 \u0441\u0430 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438 \u0430\u0434\u0440\u0435\u0441\u0438.
error.msg.send.nok=\u0412\u0430\u0448\u0435\u0442\u043E \u0441\u044A\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u043D\u0435 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0431\u044A\u0434\u0435 \u0438\u0437\u043F\u0440\u0430\u0442\u0435\u043D\u043E.
error.msg.send.partially.nok=\u0412\u0430\u0448\u0435\u0442\u043E \u0441\u044A\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0431\u044A\u0434\u0435 \u0438\u0437\u043F\u0440\u0430\u0442\u0435\u043D\u043E \u0441\u0430\u043C\u043E \u0447\u0430\u0441\u0442\u0438\u0447\u043D\u043E.
......
......@@ -9,7 +9,7 @@ error.msg.content.nok=Spr\u00E1va nebo jej\u00ED p\u0159edm\u011Bt jsou chybn\u0
error.msg.notconnectto.smtp=Spojen\u00ED na SMTP server <i>{0}</i> nemohlo b\u00FDt vytvo\u0159eno.
error.msg.nousers=Vybran\u00E1 skupina nem\u00E1 \u017E\u00E1dn\u00E9 \u010Dleny. V\u00E1\u0161 e-mail nem\u016F\u017Ee b\u00FDt odesl\u00E1n.
error.msg.send.553=Adresa p\u0159\u00EDjemce nebo odes\u00EDlatele je chybn\u00E1.
error.msg.send.invalid.rcps=Zkontrolujte adresu p\u0159\u00EDjemce\:
error.msg.send.invalid.rcps=Zkontrolujte adresu p\u0159\u00EDjemce\: {0}
error.msg.send.no.rcps=Nedefinovan\u00E9 adresy.
error.msg.send.nok=Zpr\u00E1va nebyla odesl\u00E1na.
error.msg.send.partially.nok=Zpr\u00E1va odesl\u00E1na pouze \u010D\u00E1ste\u010Dn\u011B.
......
......@@ -9,7 +9,7 @@ error.msg.content.nok=Beskeden eller emnefeltet er ugyldigt.
error.msg.notconnectto.smtp=En forbindelse til SMTP serveren <i>{0}</i> kunne ikke etableres.
error.msg.nousers=Den valgte modtagergruppe har ingen medlemmer. Din e-mail kan ikke sendes.
error.msg.send.553=Afsender's og/eller modtager adresse er ugyldig.
error.msg.send.invalid.rcps=Check modtager adresse(r)\:
error.msg.send.invalid.rcps=Check modtager adresse(r)\: {0}
error.msg.send.no.rcps=Ingen adresser er defineret.
error.msg.send.nok=Beskeden er ikke sendt.
error.msg.send.partially.nok=Beskeden er delvist afsendt.
......
......@@ -14,7 +14,7 @@ error.msg.content.nok=Die Betreffzeile oder die Nachricht sind ung\u00FCltig.
error.msg.notconnectto.smtp=Die Verbindung zum SMTP-Server <i>{0}</i> konnte nicht hergestellt werden.
error.msg.nousers=Die gew\u00E4hlte Empf\u00E4ngergruppe enth\u00E4lt keine Teilnehmer. Die E-Mail kann nicht abgeschickt werden.
error.msg.send.553=Absender- und/oder Empf\u00E4ngeradresse ist nicht korrekt.
error.msg.send.invalid.rcps=\u00DCberpr\u00FCfen Sie die Empf\u00E4ngeradressen\:
error.msg.send.invalid.rcps=\u00DCberpr\u00FCfen Sie die Empf\u00E4ngeradressen\: {0}
error.msg.send.no.rcps=Es wurden keine Empf\u00E4ngeradressen definiert.
error.msg.send.nok=Die Nachricht konnte nicht gesendet werden.
error.msg.send.partially.nok=Die Nachricht konnte nur teilweise gesendet werden.
......
......@@ -13,7 +13,7 @@ error.msg.content.nok=\u03A4\u03BF \u03BC\u03AE\u03BD\u03C5\u03BD\u03B1 \u03AE \
error.msg.notconnectto.smtp=\u0394\u03B5\u03BD \u03BC\u03C0\u03CC\u03C1\u03B5\u03C3\u03B5 \u03BD\u03B1 \u03B3\u03AF\u03BD\u03B5\u03B9 \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7 \u03BC\u03B5 \u03C4\u03BF\u03BD SMTP server <i>{0}</i>.
error.msg.nousers=\u0397 \u03BF\u03BC\u03AC\u03B4\u03B1 \u03C0\u03B1\u03C1\u03B1\u03BB\u03B7\u03C0\u03C4\u03CE\u03BD \u03B4\u03B5\u03BD \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03B5\u03B9 \u03C3\u03C5\u03BC\u03BC\u03B5\u03C4\u03AD\u03C7\u03BF\u03BD\u03C4\u03B5\u03C2. \u03A4\u03BF e-mail \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03C3\u03C4\u03B1\u03BB\u03B5\u03AF.
error.msg.send.553=\u039B\u03B1\u03BD\u03B8\u03B1\u03C3\u03BC\u03AD\u03BD\u03B5\u03C2 \u03B4\u03B9\u03B5\u03C5\u03B8\u03CD\u03BD\u03C3\u03B5\u03B9\u03C2 \u03B1\u03C0\u03BF\u03C3\u03C4\u03BF\u03BB\u03AD\u03B1 \u03BA\u03B1\u03B9/\u03AE \u03C0\u03B1\u03C1\u03B1\u03BB\u03AE\u03C0\u03C4\u03B7.
error.msg.send.invalid.rcps=\u0395\u03BB\u03AD\u03BE\u03C4\u03B5 \u03C4\u03B9\u03C2 \u03B4\u03B9\u03B5\u03C5\u03B8\u03CD\u03BD\u03C3\u03B5\u03B9\u03C2 \u03C4\u03C9\u03BD \u03C0\u03B1\u03C1\u03B1\u03BB\u03B7\u03C0\u03C4\u03CE\u03BD\:
error.msg.send.invalid.rcps=\u0395\u03BB\u03AD\u03BE\u03C4\u03B5 \u03C4\u03B9\u03C2 \u03B4\u03B9\u03B5\u03C5\u03B8\u03CD\u03BD\u03C3\u03B5\u03B9\u03C2 \u03C4\u03C9\u03BD \u03C0\u03B1\u03C1\u03B1\u03BB\u03B7\u03C0\u03C4\u03CE\u03BD\: {0}
error.msg.send.no.rcps=\u0394\u03B5\u03BD \u03BF\u03C1\u03AF\u03C3\u03C4\u03B7\u03BA\u03B1\u03BD \u03B4\u03B9\u03B5\u03C5\u03B8\u03CD\u03BD\u03C3\u03B5\u03B9\u03C2.
error.msg.send.nok=\u03A4\u03BF \u03BC\u03AE\u03BD\u03C5\u03BC\u03B1 \u03B4\u03B5\u03BD \u03C3\u03C4\u03AC\u03BB\u03B8\u03B7\u03BA\u03B5.
error.msg.send.partially.nok=\u039C\u03CC\u03BD\u03BF \u03AD\u03BD\u03B1 \u03BC\u03AD\u03C1\u03BF\u03C2 \u03C4\u03BF\u03C5 \u03BC\u03B7\u03BD\u03CD\u03BC\u03B1\u03C4\u03BF\u03C2 \u03C3\u03C4\u03AC\u03BB\u03B8\u03B7\u03BA\u03B5.
......
......@@ -14,7 +14,7 @@ error.msg.content.nok=Your message or its subject is invalid.
error.msg.notconnectto.smtp=A connection to the SMTP server <i>{0}</i> could not be established.
error.msg.nousers=The selected recipient group has no participants. Your e-mail cannot be sent.
error.msg.send.553=Sender's and/or recipient's address incorrect.
error.msg.send.invalid.rcps=Check the recipient's address(es)\:
error.msg.send.invalid.rcps=Check the recipient's address(es)\: {0}
error.msg.send.no.rcps=No addressees defined.
error.msg.send.nok=Your message could not be sent.
error.msg.send.partially.nok=Your message could only be sent partially.
......
......@@ -11,7 +11,7 @@ error.msg.content.nok=El mensaje o el sujeto no es v\u00E1lido.
error.msg.notconnectto.smtp=Error\: La conexi\u00F3n con el servidor SMTP <i>{0}</i> pudo ser establecido.
error.msg.nousers=El grupo de destinatarios seleccionado no tiene participantes. Tu e-mail no puede ser enviado.
error.msg.send.553=Direcci\u00F3n incorrecta de remitente y/o destinatario
error.msg.send.invalid.rcps=Comprueba las direcciones de destinatarios\:
error.msg.send.invalid.rcps=Comprueba las direcciones de destinatarios\: {0}
error.msg.send.no.rcps=No hay direcci\u00F3n definida.
error.msg.send.nok=El mensaje no ha sido enviado.
error.msg.send.partially.nok=El mensaje ha sido enviado s\u00F3lo parcialmente.
......
......@@ -9,7 +9,7 @@ error.msg.content.nok=The message or its subject is invalid.
error.msg.notconnectto.smtp=A connection to the SMTP server <i>{0}</i> could not be established.
error.msg.nousers=The selected recipient group has no participants. Your e-mail cannot be sent.
error.msg.send.553=Sender's and/or recipient's address incorrect.
error.msg.send.invalid.rcps=Check the recipient's address(es)\:
error.msg.send.invalid.rcps=Check the recipient's address(es)\: {0}
error.msg.send.no.rcps=No addressees defined.
error.msg.send.nok=The message was not sent.
error.msg.send.partially.nok=The message was sent only partially.
......
......@@ -14,7 +14,7 @@ error.msg.content.nok=L'objet ou le message n'est pas valable.
error.msg.notconnectto.smtp=La connection au serveur SMTP <i>{0}</i> n'a pas pu \u00EAtre \u00E9tablie.
error.msg.nousers=Le groupe de r\u00E9cepteurs s\u00E9lectionn\u00E9 ne contient aucun participant. Le message ne peut pas \u00EAtre envoy\u00E9.
error.msg.send.553=L'adresse de l'exp\u00E9diteur et/ou du destinataire n'est pas correcte.
error.msg.send.invalid.rcps=V\u00E9rifier l'adresse du destinataire.
error.msg.send.invalid.rcps=V\u00E9rifier l'adresse courriel du ou des destinataires suivants: {0}
error.msg.send.no.rcps=Aucun destinataire n'a \u00E9t\u00E9 d\u00E9finie.
error.msg.send.nok=Le message n'a pas pu \u00EAtre envoy\u00E9.
error.msg.send.partially.nok=Le message n'a pu \u00EAtre envoy\u00E9 que partiellement.
......
......@@ -13,7 +13,7 @@ error.msg.content.nok="Soggetto" messaggio non valido.
error.msg.notconnectto.smtp=La connessione al server SMTP <i>{0}</i> non \u00E8 stata stabilita.
error.msg.nousers=Il gruppo di destinatari selezionato non contiene partecipanti. La e-mail non pu\u00F2 essere inviata.
error.msg.send.553=L'indirizzo del mittente e/o del destinatario non \u00E8 corretto.
error.msg.send.invalid.rcps=Controlli gli indirizzi dei destinatari, p.f.\:
error.msg.send.invalid.rcps=Controlli gli indirizzi dei destinatari, p.f.\: {0}
error.msg.send.no.rcps=Non \u00E8 stato definino alcun indirizzo per i destinatari.
error.msg.send.nok=Il messaggio non ha potuto essere spedito.
error.msg.send.partially.nok=Il messaggio \u00E8 stato spedito solo parzialmente.
......
......@@ -13,7 +13,7 @@ error.msg.content.nok=\u3042\u306A\u305F\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u30
error.msg.notconnectto.smtp=SMTP\u30B5\u30FC\u30D0 <i>{0}</i> \u3078\u306E\u63A5\u7D9A\u3092\u78BA\u7ACB\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002
error.msg.nousers=\u9078\u629E\u3055\u308C\u305F\u53D7\u4FE1\u30B0\u30EB\u30FC\u30D7\u306B\u306F\u3001\u53C2\u52A0\u8005\u304C\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u3042\u306A\u305F\u306EE\u30E1\u30FC\u30EB\u3092\u9001\u4FE1\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002
error.msg.send.553=\u9001\u4FE1\u8005\u307E\u305F\u306F\u53D7\u4FE1\u8005\u306E\u30A2\u30C9\u30EC\u30B9\u304C\u6B63\u3057\u304F\u3042\u308A\u307E\u305B\u3093\u3002
error.msg.send.invalid.rcps=\u53D7\u4FE1\u8005\u306E\u30A2\u30C9\u30EC\u30B9\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002
error.msg.send.invalid.rcps=\u53D7\u4FE1\u8005\u306E\u30A2\u30C9\u30EC\u30B9\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002 {0}
error.msg.send.no.rcps=\u30A2\u30C9\u30EC\u30B9\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
error.msg.send.nok=\u3042\u306A\u305F\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u9001\u4FE1\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002
error.msg.send.partially.nok=\u3042\u306A\u305F\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u306F\u3001\u4E00\u90E8\u306E\u307F\u9001\u4FE1\u3055\u308C\u307E\u3057\u305F\u3002
......
......@@ -9,7 +9,7 @@ error.msg.content.nok=Neteisinga \u017Einut\u0117 arba jos pavadinimas
error.msg.notconnectto.smtp=Negalima prisijungti prie SMTP serverio <i>{0}</i>.
error.msg.nousers=Pasirinkta grup\u0117 neturi dalyvi\u0173. J\u016Bs\u0173 el. lai\u0161kas negali b\u016Bti i\u0161si\u0173stas.
error.msg.send.553=Siunt\u0117jo ar/ir gav\u0117jo adresas neteisingas
error.msg.send.invalid.rcps=Patikrinkite gav\u0117jo adres\u0105 (-us)
error.msg.send.invalid.rcps=Patikrinkite gav\u0117jo adres\u0105 (-us) {0}
error.msg.send.no.rcps=Nenurodyti adresai
error.msg.send.nok=\u017Dinut\u0117s nepavyko i\u0161si\u0173sti
error.msg.send.partially.nok=I\u0161si\u0173sta tik dalis \u017Einut\u0117s
......
......@@ -13,7 +13,7 @@ error.msg.content.nok=Uw bericht of zijn onderwerp is ongeldig.
error.msg.notconnectto.smtp=Er kon geen connectie naar de SMTP server <i>{0}</i> vastgesteld worden.
error.msg.nousers=De geselecteerde ontvangersgroep heeft geen cursisten. Uw e-mail kan niet verzonden worden.
error.msg.send.553=Het adres van de zender en/of ontvanger is niet correct.
error.msg.send.invalid.rcps=Kijk het adres van de ontvanger(s) na\:
error.msg.send.invalid.rcps=Kijk het adres van de ontvanger(s) na\: {0}
error.msg.send.no.rcps=Geen adressen gedefinieerd.
error.msg.send.nok=Uw bericht kon niet verzonden worden.
error.msg.send.partially.nok=Uw bericht kon enkel gedeeltelijk verzonden worden.
......
......@@ -13,7 +13,7 @@ error.msg.content.nok=Wiadomo\u015B\u0107 lub jej tytu\u0142 jest nieprawid\u014
error.msg.notconnectto.smtp=Po\u0142\u0105czenie z serwerem SMTP <i>{0}<i> nie zosta\u0142o nawi\u0105zane.
error.msg.nousers=Wybrana grupa odbiorc\u00F3w nie zawiera \u017Cadnych cz\u0142onk\u00F3w. E-mail nie mo\u017Ce zosta\u0107 wys\u0142any.
error.msg.send.553=Adres odbiorcy i/lub nadawcy nieprawid\u0142owy.
error.msg.send.invalid.rcps=Sprawd\u017A poprawno\u015B\u0107 adres\u00F3w.
error.msg.send.invalid.rcps=Sprawd\u017A poprawno\u015B\u0107 adres\u00F3w. {0}
error.msg.send.no.rcps=Nie zdefiniowano adres\u00F3w.
error.msg.send.nok=Wiadomo\u015B\u0107 nie zosta\u0142a wys\u0142ana.
error.msg.send.partially.nok=Wiadomo\u015B\u0107 zosta\u0142a tylko cz\u0119\u015Bciowo wys\u0142ana.
......
......@@ -14,7 +14,7 @@ error.msg.content.nok=A mensagem ou seu assunto \u00E9 inv\u00E1lido.
error.msg.notconnectto.smtp=Uma conex\u00E3o ao servidor SMTP <i>{0}</i> n\u00E3o pode ser estabelecida.
error.msg.nousers=O grupo receptor selecionado n\u00E3o tem participantes. Seu e-mail n\u00E3o pode ser enviado.
error.msg.send.553=Endere\u00E7o do remetente e/ou do receptor incorreto.
error.msg.send.invalid.rcps=Checar o endere\u00E7o(s) do receptor\:
error.msg.send.invalid.rcps=Checar o endere\u00E7o(s) do receptor\: {0}
error.msg.send.no.rcps=Nenhum endere\u00E7o definido.
error.msg.send.nok=A mensagem n\u00E3o foi enviada.
error.msg.send.partially.nok=A mensagem foi enviada somente parcialmente.
......
......@@ -9,7 +9,7 @@ error.msg.content.nok=A mensagem ou seu assunto \u00E9 inv\u00E1lido.
error.msg.notconnectto.smtp=Uma conex\u00E3o ao servidor SMTP <i>{0}</i> n\u00E3o pode ser estabelecida.
error.msg.nousers=O grupo receptor selecionado n\u00E3o tem participantes. Seu e-mail n\u00E3o pode ser enviado.
error.msg.send.553=Endere\u00E7o do remetente e/ou do receptor incorreto.
error.msg.send.invalid.rcps=Checar o endere\u00E7o(s) do receptor\:
error.msg.send.invalid.rcps=Checar o endere\u00E7o(s) do receptor\: {0}
error.msg.send.no.rcps=Nenhum endere\u00E7o definido.
error.msg.send.nok=A mensagem n\u00E3o foi enviada.
error.msg.send.partially.nok=A mensagem foi enviada somente parcialmente.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment