/** * 이메일 추가 * * @return */ @Transactional public static Result addEmail() { Form<Email> emailForm = form(Email.class).bindFromRequest(); String newEmail = emailForm.data().get("email"); if (emailForm.hasErrors()) { flash(Constants.WARNING, emailForm.error("email").message()); return redirect(routes.UserApp.editUserInfoForm()); } User currentUser = currentUser(); if (currentUser == null || currentUser.isAnonymous()) { return forbidden(ErrorViews.NotFound.render()); } if (User.isEmailExist(newEmail) || Email.exists(newEmail, true) || currentUser.has(newEmail)) { flash(Constants.WARNING, Messages.get("user.email.duplicate")); return redirect(routes.UserApp.editUserInfoForm()); } Email email = new Email(); User user = currentUser(); email.user = user; email.email = newEmail; email.valid = false; user.addEmail(email); return redirect(routes.UserApp.editUserInfoForm()); }
/** * 대표 메일로 설정하기 * * @param id * @return */ @Transactional public static Result setAsMainEmail(Long id) { User currentUser = currentUser(); Email email = Email.find.byId(id); if (currentUser == null || currentUser.isAnonymous() || email == null) { return forbidden(ErrorViews.NotFound.render()); } if (!AccessControl.isAllowed(currentUser, email.user.asResource(), Operation.UPDATE)) { return forbidden(ErrorViews.Forbidden.render(Messages.get("error.forbidden"))); } String oldMainEmail = currentUser.email; currentUser.email = email.email; currentUser.removeEmail(email); currentUser.update(); Email newSubEmail = new Email(); newSubEmail.valid = true; newSubEmail.email = oldMainEmail; newSubEmail.user = currentUser; currentUser.addEmail(newSubEmail); return redirect(routes.UserApp.editUserInfoForm()); }
protected void notifyOfReject( Context context, BasicWorkflowItem workflowItem, EPerson e, String reason) { try { // Get the item title String title = getItemTitle(workflowItem); // Get the collection Collection coll = workflowItem.getCollection(); // Get rejector's name String rejector = getEPersonName(e); Locale supportedLocale = I18nUtil.getEPersonLocale(e); Email email = Email.getEmail(I18nUtil.getEmailFilename(supportedLocale, "submit_reject")); email.addRecipient(workflowItem.getSubmitter().getEmail()); email.addArgument(title); email.addArgument(coll.getName()); email.addArgument(rejector); email.addArgument(reason); email.addArgument(getMyDSpaceLink()); email.send(); } catch (RuntimeException re) { // log this email error log.warn( LogManager.getHeader( context, "notify_of_reject", "cannot email user eperson_id=" + e.getID() + " eperson_email=" + e.getEmail() + " workflow_item_id=" + workflowItem.getID() + ": " + re.getMessage())); throw re; } catch (Exception ex) { // log this email error log.warn( LogManager.getHeader( context, "notify_of_reject", "cannot email user eperson_id=" + e.getID() + " eperson_email=" + e.getEmail() + " workflow_item_id=" + workflowItem.getID() + ": " + ex.getMessage())); } }
/** * 이메일 확인 * * @param id * @param token * @return */ @Transactional public static Result confirmEmail(Long id, String token) { Email email = Email.find.byId(id); if (email == null) { return forbidden(ErrorViews.NotFound.render()); } if (email.validate(token)) { addUserInfoToSession(email.user); return redirect(routes.UserApp.editUserInfoForm()); } else { return forbidden(ErrorViews.NotFound.render()); } }
/** * 이메일 삭제 * * @param id * @return */ @Transactional public static Result deleteEmail(Long id) { User currentUser = currentUser(); Email email = Email.find.byId(id); if (currentUser == null || currentUser.isAnonymous() || email == null) { return forbidden(ErrorViews.NotFound.render()); } if (!AccessControl.isAllowed(currentUser, email.user.asResource(), Operation.DELETE)) { return forbidden(ErrorViews.Forbidden.render(Messages.get("error.forbidden"))); } email.delete(); return redirect(routes.UserApp.editUserInfoForm()); }
/** * 보조 이메일 확인 메일 보내기 * * @param id * @return */ @Transactional public static Result sendValidationEmail(Long id) { User currentUser = currentUser(); Email email = Email.find.byId(id); if (currentUser == null || currentUser.isAnonymous() || email == null) { return forbidden(ErrorViews.NotFound.render()); } if (!AccessControl.isAllowed(currentUser, email.user.asResource(), Operation.UPDATE)) { return forbidden(ErrorViews.Forbidden.render(Messages.get("error.forbidden"))); } email.sendValidationEmail(); flash(Constants.WARNING, "확인 메일을 전송했습니다."); return redirect(routes.UserApp.editUserInfoForm()); }
@Override public void alertUsersOnTaskActivation( Context c, XmlWorkflowItem wfi, String emailTemplate, List<EPerson> epa, String... arguments) throws IOException, SQLException, MessagingException { if (noEMail.containsKey(wfi.getItem().getID())) { // suppress email, and delete key noEMail.remove(wfi.getItem().getID()); } else { Email mail = Email.getEmail(I18nUtil.getEmailFilename(c.getCurrentLocale(), emailTemplate)); for (String argument : arguments) { mail.addArgument(argument); } for (EPerson anEpa : epa) { mail.addRecipient(anEpa.getEmail()); } mail.send(); } }
// send notices of curation activity @Override public void notifyOfCuration( Context c, BasicWorkflowItem wi, List<EPerson> ePeople, String taskName, String action, String message) throws SQLException, IOException { try { // Get the item title String title = getItemTitle(wi); // Get the submitter's name String submitter = getSubmitterName(wi); // Get the collection Collection coll = wi.getCollection(); for (EPerson epa : ePeople) { Locale supportedLocale = I18nUtil.getEPersonLocale(epa); Email email = Email.getEmail(I18nUtil.getEmailFilename(supportedLocale, "flowtask_notify")); email.addArgument(title); email.addArgument(coll.getName()); email.addArgument(submitter); email.addArgument(taskName); email.addArgument(message); email.addArgument(action); email.addRecipient(epa.getEmail()); email.send(); } } catch (MessagingException e) { log.warn( LogManager.getHeader( c, "notifyOfCuration", "cannot email users of workflow_item_id " + wi.getID() + ": " + e.getMessage())); } }
/* * 신규 가입 사용자 생성 */ private static User createNewUser(User user) { RandomNumberGenerator rng = new SecureRandomNumberGenerator(); user.passwordSalt = Arrays.toString(rng.nextBytes().getBytes()); user.password = hashedPassword(user.password, user.passwordSalt); User.create(user); if (isUseSignUpConfirm()) { user.changeState(UserState.LOCKED); } else { user.changeState(UserState.ACTIVE); } Email.deleteOtherInvalidEmails(user.email); return user; }
/** * 사용자 정보 수정 * * @return */ @With(AnonymousCheckAction.class) @Transactional public static Result editUserInfo() { Form<User> userForm = new Form<>(User.class).bindFromRequest("name", "email"); String newEmail = userForm.data().get("email"); String newName = userForm.data().get("name"); User user = UserApp.currentUser(); if (StringUtils.isEmpty(newEmail)) { userForm.reject("email", "user.wrongEmail.alert"); } else { if (!StringUtils.equals(user.email, newEmail) && User.isEmailExist(newEmail)) { userForm.reject("email", "user.email.duplicate"); } } if (userForm.error("email") != null) { flash(Constants.WARNING, userForm.error("email").message()); return badRequest(edit.render(userForm, user)); } user.email = newEmail; user.name = newName; try { Long avatarId = Long.valueOf(userForm.data().get("avatarId")); if (avatarId != null) { Attachment attachment = Attachment.find.byId(avatarId); String primary = attachment.mimeType.split("/")[0].toLowerCase(); if (attachment.size > AVATAR_FILE_LIMIT_SIZE) { userForm.reject("avatarId", "user.avatar.fileSizeAlert"); } if (primary.equals("image")) { Attachment.deleteAll(currentUser().avatarAsResource()); attachment.moveTo(currentUser().avatarAsResource()); } } } catch (NumberFormatException ignored) { } Email.deleteOtherInvalidEmails(user.email); user.update(); return redirect( routes.UserApp.userInfo(user.loginId, DEFAULT_GROUP, DAYS_AGO, DEFAULT_SELECTED_TAB)); }
protected void notifyOfReject(Context c, XmlWorkflowItem wi, EPerson e, String reason) { try { // Get the item title String title = wi.getItem().getName(); // Get the collection Collection coll = wi.getCollection(); // Get rejector's name String rejector = getEPersonName(e); Locale supportedLocale = I18nUtil.getEPersonLocale(e); Email email = Email.getEmail(I18nUtil.getEmailFilename(supportedLocale, "submit_reject")); email.addRecipient(wi.getSubmitter().getEmail()); email.addArgument(title); email.addArgument(coll.getName()); email.addArgument(rejector); email.addArgument(reason); email.addArgument(ConfigurationManager.getProperty("dspace.url") + "/mydspace"); email.send(); } catch (Exception ex) { // log this email error log.warn( LogManager.getHeader( c, "notify_of_reject", "cannot email user" + " eperson_id" + e.getID() + " eperson_email" + e.getEmail() + " workflow_item_id" + wi.getID())); } }
/** * notify the submitter that the item is archived * * @param context The relevant DSpace Context. * @param item which item was archived * @param coll collection name to display in template * @throws SQLException An exception that provides information on a database access error or other * errors. * @throws IOException A general class of exceptions produced by failed or interrupted I/O * operations. */ protected void notifyOfArchive(Context context, Item item, Collection coll) throws SQLException, IOException { try { // Get submitter EPerson ep = item.getSubmitter(); // Get the Locale Locale supportedLocale = I18nUtil.getEPersonLocale(ep); Email email = Email.getEmail(I18nUtil.getEmailFilename(supportedLocale, "submit_archive")); // Get the item handle to email to user String handle = handleService.findHandle(context, item); // Get title List<MetadataValue> titles = itemService.getMetadata(item, MetadataSchema.DC_SCHEMA, "title", null, Item.ANY); String title = ""; try { title = I18nUtil.getMessage("org.dspace.workflow.WorkflowManager.untitled"); } catch (MissingResourceException e) { title = "Untitled"; } if (titles.size() > 0) { title = titles.iterator().next().getValue(); } email.addRecipient(ep.getEmail()); email.addArgument(title); email.addArgument(coll.getName()); email.addArgument(handleService.getCanonicalForm(handle)); email.send(); } catch (MessagingException e) { log.warn( LogManager.getHeader( context, "notifyOfArchive", "cannot email user" + " item_id=" + item.getID())); } }
/** notify the submitter that the item is archived */ protected void notifyOfArchive(Context context, Item item, Collection coll) throws SQLException, IOException { try { // Get submitter EPerson ep = item.getSubmitter(); // Get the Locale Locale supportedLocale = I18nUtil.getEPersonLocale(ep); Email email = Email.getEmail(I18nUtil.getEmailFilename(supportedLocale, "submit_archive")); // Get the item handle to email to user String handle = handleService.findHandle(context, item); // Get title String title = item.getName(); if (StringUtils.isBlank(title)) { try { title = I18nUtil.getMessage("org.dspace.workflow.WorkflowManager.untitled"); } catch (MissingResourceException e) { title = "Untitled"; } } email.addRecipient(ep.getEmail()); email.addArgument(title); email.addArgument(coll.getName()); email.addArgument(handleService.getCanonicalForm(handle)); email.send(); } catch (MessagingException e) { log.warn( LogManager.getHeader( context, "notifyOfArchive", "cannot email user; item_id=" + item.getID() + ": " + e.getMessage())); } }
public void notifyAccountLock(Account account, String context) { PartnerCode partnerCode = account.getPartnerCode(); String lockedOutMessageBody = SysConfigManager.instance() .getValue("lockedOutMessageBody", LOCKED_OUT_MESSAGE_BODY, partnerCode); String lockedOutMessageSubject = SysConfigManager.instance() .getValue("lockedOutMessageSubject", LOCKED_OUT_MESSAGE_SUBJECT, partnerCode); String lockedOutMessageFrom = SysConfigManager.instance() .getValue("lockedOutMessageFrom", LOCKED_OUT_MESSAGE_FROM, partnerCode); String lockedOutMessageAlias = SysConfigManager.instance() .getValue("lockedOutMessageAlias", LOCKED_OUT_MESSAGE_ALIAS, partnerCode); try { Email email = new Email(); email.setSubject(lockedOutMessageSubject); email.setStatus("0"); email.setUserId(account.getUser_id()); email.setMessage_type("EMAIL"); email.setFrom(lockedOutMessageFrom); email.setFrom_alias(lockedOutMessageAlias); email.setTo(account.getLoginName()); email.setBodySize(lockedOutMessageBody.length()); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); email.setMaildate(dateFormat.format(new Date(System.currentTimeMillis()))); // ugh! email.setOriginal_account(account.getLoginName()); // create the pojgo EmailPojo emailPojo = new EmailPojo(); emailPojo.setEmail(email); Body body = new Body(); body.setData(lockedOutMessageBody.getBytes()); // note, the email will be encoded to prevent sql-injection. since this email is destined // directly for the // device, we need to reverse the encoding after the call to newSaveEmail new EmailRecievedService().newSaveEmail(account, email, body); // Added by Dan so we stop checking accounts that have incorrect passwords account.setStatus("0"); } catch (Throwable t) { log.warn(String.format("failed to save locked out message for %s", context), t); } }
public HttpEntity buildBody(Email email) { MultipartEntityBuilder builder = MultipartEntityBuilder.create(); // We are using an API key if (this.username != null) { builder.addTextBody("api_user", this.username); builder.addTextBody("api_key", this.password); } String[] tos = email.getTos(); String[] tonames = email.getToNames(); String[] ccs = email.getCcs(); String[] bccs = email.getBccs(); // If SMTPAPI Header is used, To is still required. #workaround. if (tos.length == 0) { builder.addTextBody( String.format(PARAM_TO, 0), email.getFrom(), ContentType.create(TEXT_PLAIN, UTF_8)); } for (int i = 0, len = tos.length; i < len; i++) builder.addTextBody(PARAM_TO, tos[i], ContentType.create("text/plain", "UTF-8")); for (int i = 0, len = tonames.length; i < len; i++) builder.addTextBody(PARAM_TONAME, tonames[i], ContentType.create("text/plain", "UTF-8")); for (int i = 0, len = ccs.length; i < len; i++) builder.addTextBody(PARAM_CC, ccs[i], ContentType.create("text/plain", "UTF-8")); for (int i = 0, len = bccs.length; i < len; i++) builder.addTextBody(PARAM_BCC, bccs[i], ContentType.create(TEXT_PLAIN, UTF_8)); // Files if (email.getAttachments().size() > 0) { Iterator it = email.getAttachments().entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); builder.addBinaryBody( String.format(PARAM_FILES, entry.getKey()), (InputStream) entry.getValue()); } } if (email.getContentIds().size() > 0) { Iterator it = email.getContentIds().entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); builder.addTextBody( String.format(PARAM_CONTENTS, entry.getKey()), (String) entry.getValue()); } } if (email.getHeaders().size() > 0) builder.addTextBody( PARAM_HEADERS, new JSONObject(email.getHeaders()).toString(), ContentType.create(TEXT_PLAIN, UTF_8)); if (email.getFrom() != null && !email.getFrom().isEmpty()) builder.addTextBody(PARAM_FROM, email.getFrom(), ContentType.create(TEXT_PLAIN, UTF_8)); if (email.getFromName() != null && !email.getFromName().isEmpty()) builder.addTextBody( PARAM_FROMNAME, email.getFromName(), ContentType.create(TEXT_PLAIN, UTF_8)); if (email.getReplyTo() != null && !email.getReplyTo().isEmpty()) builder.addTextBody(PARAM_REPLYTO, email.getReplyTo(), ContentType.create(TEXT_PLAIN, UTF_8)); if (email.getSubject() != null && !email.getSubject().isEmpty()) builder.addTextBody(PARAM_SUBJECT, email.getSubject(), ContentType.create(TEXT_PLAIN, UTF_8)); if (email.getHtml() != null && !email.getHtml().isEmpty()) builder.addTextBody(PARAM_HTML, email.getHtml(), ContentType.create(TEXT_PLAIN, UTF_8)); if (email.getText() != null && !email.getText().isEmpty()) builder.addTextBody(PARAM_TEXT, email.getText(), ContentType.create(TEXT_PLAIN, UTF_8)); String tmpString = email.smtpapi.jsonString(); if (!tmpString.equals("{}")) builder.addTextBody(PARAM_XSMTPAPI, tmpString, ContentType.create(TEXT_PLAIN, UTF_8)); return builder.build(); }
protected void notifyGroupOfTask( Context c, BasicWorkflowItem wi, Group mygroup, List<EPerson> epa) throws SQLException, IOException { // check to see if notification is turned off // and only do it once - delete key after notification has // been suppressed for the first time UUID myID = wi.getItem().getID(); if (noEMail.containsKey(myID)) { // suppress email, and delete key noEMail.remove(myID); } else { try { // Get the item title String title = getItemTitle(wi); // Get the submitter's name String submitter = getSubmitterName(wi); // Get the collection Collection coll = wi.getCollection(); String message = ""; for (EPerson anEpa : epa) { Locale supportedLocale = I18nUtil.getEPersonLocale(anEpa); Email email = Email.getEmail(I18nUtil.getEmailFilename(supportedLocale, "submit_task")); email.addArgument(title); email.addArgument(coll.getName()); email.addArgument(submitter); ResourceBundle messages = ResourceBundle.getBundle("Messages", supportedLocale); switch (wi.getState()) { case WFSTATE_STEP1POOL: message = messages.getString("org.dspace.workflow.WorkflowManager.step1"); break; case WFSTATE_STEP2POOL: message = messages.getString("org.dspace.workflow.WorkflowManager.step2"); break; case WFSTATE_STEP3POOL: message = messages.getString("org.dspace.workflow.WorkflowManager.step3"); break; } email.addArgument(message); email.addArgument(getMyDSpaceLink()); email.addRecipient(anEpa.getEmail()); email.send(); } } catch (MessagingException e) { String gid = (mygroup != null) ? String.valueOf(mygroup.getID()) : "none"; log.warn( LogManager.getHeader( c, "notifyGroupofTask", "cannot email user group_id=" + gid + " workflow_item_id=" + wi.getID() + ": " + e.getMessage())); } } }
/** * Deliveres notification to the user that an email has been dropped. Typically due to size * restriction * * @param account * @param messageNumber * @param message * @throws Exception */ public void saveMessageDroppedNotification( Account account, int messageNumber, Message message, int reportedSize) throws Exception { MessageParser parser = new MessageParser(); Email email = new Email(); email.setSubject( "Your email"); // ReceiverUtilsTools.subSubject(parser.parseMsgSubject(message), // subjectSize)); email.setFrom(parser.parseMsgAddress(message, "FROM", false)); email.setTo(ReceiverUtilsTools.subAddress(parser.parseMsgAddress(message, "TO", true))); email.setCc(ReceiverUtilsTools.subAddress(parser.parseMsgAddress(message, "CC", true))); email.setBcc(ReceiverUtilsTools.subAddress(parser.parseMsgAddress(message, "BCC", true))); email.setMaildate(ReceiverUtilsTools.dateToStr(message.getSentDate())); email.setStatus("0"); email.setUserId(account.getUser_id()); email.setMessage_type("EMAIL"); Body body = new Body(); String droppedMessage = getEmailDroppedMessage(account, getMessageDate(message), reportedSize, email.getFrom()); body.setData(droppedMessage.getBytes()); email.setBodySize(droppedMessage.length()); int saveStatus = DALDominator.newSaveMail(account, email, body); if (log.isDebugEnabled()) log.debug( String.format( "[%s] msgNum=%d, saving completed for dropped message with status %s", account.getName(), messageNumber, saveStatus)); }