public Map act()

in blocks/cocoon-mail/cocoon-mail-impl/src/main/java/org/apache/cocoon/acting/Sendmail.java [157:294]


    public Map act(Redirector redirector,
                   SourceResolver resolver,
                   Map objectModel,
                   String source,
                   Parameters parameters)
    throws Exception {
        boolean success = false;
        Map status = null;

        MailSender mms = null;
        try {
            Request request = ObjectModelHelper.getRequest(objectModel);

            // FIXME Remove support of old smtphost parameter
            String smtpHost = parameters.getParameter("smtp-host", parameters.getParameter("smtphost", this.smtpHost));
            String smtpUser = parameters.getParameter("smtp-user", this.smtpUser);
            String smtpPassword = parameters.getParameter("smtp-password", this.smtpPassword);

            // Empty parameter means absent parameter
            if ("".equals(smtpHost)) {
                smtpHost = this.smtpHost;
            }
            if ("".equals(smtpUser)) {
                smtpUser = this.smtpUser;
            }
            if ("".equals(smtpPassword)) {
                smtpPassword = this.smtpPassword;
            }

            mms = (MailSender) this.manager.lookup(MailSender.ROLE);

            // Initialize non-default session if host or user specified.
            if (smtpHost != null || smtpUser != null) {
                mms.setSmtpHost(smtpHost, smtpUser, smtpPassword);
            }

            if (parameters.isParameter("from")) {
                mms.setFrom(parameters.getParameter("from", null));
            }
            if (parameters.isParameter("to")) {
                mms.setTo(parameters.getParameter("to", null));
            }
            if (parameters.isParameter("replyTo")) {
                mms.setReplyTo(parameters.getParameter("replyTo", null));
            }
            if (parameters.isParameter("cc")) {
                mms.setCc(parameters.getParameter("cc", null));
            }
            if (parameters.isParameter("bcc")) {
                mms.setBcc(parameters.getParameter("bcc", null));
            }
            if (parameters.isParameter("subject")) {
                mms.setSubject(parameters.getParameter("subject", null));
            }

            String bodyURL = parameters.getParameter("src", "");
            String body = parameters.getParameter("body", "");
            if (bodyURL.length() > 0) {
                String type = null;
                if (parameters.isParameter("srcMimeType")) {
                    type = parameters.getParameter("srcMimeType", null);
                }
                mms.setBodyURL(bodyURL, type);
            } else if (body.length() > 0) {
                String type = null;
                String charset = parameters.getParameter("charset", "");
                if (charset.length() > 0) {
                    type = "text/plain; charset=" + charset;
                }
                mms.setBody(body, type);
            }

            if (parameters.isParameter("attachments")) {
                String fileName[] = StringUtils.split(parameters.getParameter("attachments"));
                for (int i = 0; i < fileName.length; i++) {
                    String srcName = fileName[i];

                    if (srcName.indexOf(":") == -1) {
                        Object obj = request.get(srcName);
                        mms.addAttachment(obj);
                        if (getLogger().isDebugEnabled()) {
                            getLogger().debug("request-attachment: " + obj);
                        }
                    } else {
                        mms.addAttachmentURL(srcName);
                        if (getLogger().isDebugEnabled()) {
                            getLogger().debug("sitemap-attachment: " + srcName);
                        }
                    }
                }
            }

            mms.send();

            success = true;
            status = new HashMap(3);
            status.put(Sendmail.STATUS, "success");

        } catch (AddressException e) {
            getLogger().warn("AddressException: ", e);

            status = new HashMap(3);
            status.put(Sendmail.STATUS, "user-error");
            status.put(Sendmail.MESSAGE, e.getMessage());

        } catch (MessagingException e) {
            getLogger().warn("MessagingException: " +
                             "An error occured while sending email.", e);

            status = new HashMap(3);
            status.put(Sendmail.STATUS, "server-error");
            status.put(Sendmail.MESSAGE,
                       "An error occured while sending email: " + e.getMessage());

        } catch (ServiceException e) {
            getLogger().error("ServiceException: " +
                              "An error occured while initializing.", e);

            status = new HashMap(3);
            status.put(Sendmail.STATUS, "server-error");
            status.put(Sendmail.MESSAGE,
                       "An exception was thrown while sending email: " + e.getMessage());

        } catch (Exception e) {
            getLogger().error("An exception was thrown while sending email.", e);

            status = new HashMap(3);
            status.put(Sendmail.STATUS, "server-error");
            status.put(Sendmail.MESSAGE, "An exception was thrown while sending email.");

        } finally {
            ObjectModelHelper.getRequest(objectModel).setAttribute(Sendmail.REQUEST_ATTRIBUTE,
                                                                   status);
            this.manager.release(mms);
        }

        return success ? status : null;
    }