view src/nabble/view/web/user/SendEmail.jtp @ 4:e79c7d4dcd7a

fix email footer
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 25 Apr 2019 15:15:45 -0600
parents 7ecd1a4ef557
children 18cf4872fd7f
line wrap: on
line source

<%
package nabble.view.web.user;

import fschmidt.util.java.HtmlUtils;
import fschmidt.util.mail.Mail;
import fschmidt.util.mail.MailAddress;
import fschmidt.util.mail.MailException;
import fschmidt.util.mail.MailHome;
import fschmidt.util.mail.PlainTextContent;
import nabble.model.Message;
import nabble.model.ModelException;
import nabble.model.ModelHome;
import nabble.model.Node;
import nabble.model.Site;
import nabble.model.User;
import nabble.view.lib.Jtp;
import nabble.view.lib.Shared;
import nabble.view.lib.Recaptcha;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.Set;


public final class SendEmail extends HttpServlet {
	private static final Logger logger = LoggerFactory.getLogger(SendEmail.class);

	protected void service(HttpServletRequest request,HttpServletResponse response)
		throws ServletException, IOException
	{
		PrintWriter out = response.getWriter();
		User user = Jtp.getUser(request,response);
		if( user==null ) {
			Jtp.login("You must login to send an email.",request,response);
			return;
		}
		String type = request.getParameter("type");
		String emailTo;
		String emailDisp;
		String subject = request.getParameter("subject");
		String message = request.getParameter("message");
		Set<String> paramNames = new HashSet<String>();
		if( type.equals("email") ) {
			emailTo = request.getParameter("email");
			emailDisp = ModelHome.hideEmail(emailTo);
			paramNames.add("email");
		} else if( type.equals("user") ) {
			User to = Jtp.getSite(request).getUser(Long.parseLong(request.getParameter("user")));
			emailTo = to.getEmail();
			emailDisp = to.getName();
			paramNames.add("user");
		} else if( type.equals("node") ) {
			Node node = Jtp.getSiteNotNull(request).getNode(Long.parseLong(request.getParameter("node")));
			int i = Integer.parseInt(request.getParameter("i"));
			emailTo = node.getMessage().getEmail(i);
			emailDisp = ModelHome.hideEmail(emailTo);
			paramNames.add("node");
			paramNames.add("i");
		} else if( type.equals("sig") ) {
			User to = Jtp.getSite(request).getUser(Long.parseLong(request.getParameter("user")));
			int i = Integer.parseInt(request.getParameter("i"));
			emailTo = to.getSignature().getEmail(i);
			emailDisp = ModelHome.hideEmail(emailTo);
			paramNames.add("user");
			paramNames.add("i");
		} else if( type.equals("pm") ) {
			Node post = Jtp.getSiteNotNull(request).getNode(Long.parseLong(request.getParameter("post")));
			User to = (User)post.getOwner();
			emailTo = to.getEmail();
			emailDisp = to.getName();
			if( subject==null ) {
				subject = post.getSubject();
				String original =
					"\n<quote author='" + post.getOwner().getNameHtml() + "'>\n"
					+ post.getMessage().getText() + "\n"
					+ "</quote>\n"
					+ "Quoted from:  " + Jtp.url(post) + "\n"
				;
				message = Message.wrapQuoteText(original);
			}
			paramNames.add("post");
		} else {
			throw new RuntimeException("type="+type);
		}
		String errorMsg = null;

		if( request.getParameter("send") != null && "POST".equals(request.getMethod()) ) {
			try {
				Recaptcha.check(request);

				Site site = Jtp.getSite(request);
				if (site != null) {
					message += "\n\n_____________________________________\nSent from " + Jtp.getBaseUrl(request) + "\n\n";
				}

				Mail mail = MailHome.newMail();
				mail.setFrom( new MailAddress(user.getEmail()) );
				mail.setTo( new MailAddress(emailTo) );
				mail.setSubject(subject);
				mail.setContent( new PlainTextContent(message) );
				ModelHome.send(mail);
				if( request.getParameter("cc") != null ) {
					mail = MailHome.newMail();
					mail.setFrom( new MailAddress(user.getEmail()) );
					mail.setTo( new MailAddress(user.getEmail()) );
					mail.setSubject(subject);
					mail.setContent( new PlainTextContent(message) );
					ModelHome.send(mail);
				}
				logger.info(
					"From: " + user.getEmail() + " (user ID=" + user.getId() + ")\n" +
					"To: " + emailTo + '\n' +
					"Subject: " + subject + '\n' + message +
					"\n------------------------------------------------------------\n"
				);
				response.sendRedirect("SendEmail2.jtp?to=" + HtmlUtils.urlEncode(emailDisp));
				return;
			} catch(MailException e) {
				logger.warn("",e);
				errorMsg = e.getMessage();
			} catch (ModelException.InvalidRecaptcha e) {
				logger.warn("",e);
				errorMsg = e.getMessage();
			}
		}
		%>
		<html>
			<head>
				<% Shared.title(request,response,"Send Email to "+HtmlUtils.htmlEncode(emailDisp)); %>
				<style type="text/css">
					div.field-title {
						margin-top: 0;
					}
				</style>
				<script type="text/javascript">
					$(document).ready(
						function() {
							Nabble.get("nabble.subject").focus();
						}
					);
				</script>
				<%= Recaptcha.JS %>
			</head>
			<body>
				<% Shared.minHeaderGlobal(request,response); %>
				<h1>Send Email to <%=HtmlUtils.htmlEncode(emailDisp)%></h1>

				<% Shared.errorMessage(request,response,errorMsg,"Please fix the error and try again.");%>
				<form method="post">
					<input type="hidden" name="type" value="<%=type%>">
					<%
					for (String name : paramNames) {
						%>
						<input type="hidden" name="<%=name%>" value="<%=request.getParameter(name)%>">
						<%
					}
					%>

					<div class="field-box light-border-color">
						<div class="second-font field-title">Email Subject</div>
						<div class="weak-color">
							<input name="subject" id="nabble.subject" size="70" value="<%=Jtp.hideNull(subject)%>" tabindex="1">
						</div>
					</div>

					<div class="field-box light-border-color">
						<div class="second-font field-title">Message</div>
						<div class="weak-color">
							<textarea style="width:40em; height: 150px;" name="message" wrap="SOFT" tabindex="2"><%=HtmlUtils.htmlEncode(Jtp.hideNull(message))%></textarea>
						</div>
					</div>

					<table style="margin-bottom:1em">
						<tr>
							<td><input id="cc" type="checkbox" name="cc" value="y" /></td>
							<td><label for="cc">Send a copy of this message to me</label></td>
						</tr>
					</table>

					<%= Recaptcha.DIV %><br>

					<input type="submit" name="send" value="Send Email" />
				</form>

				<% Shared.returnToJs(request,response); %>

				<% Shared.footer(request,response); %>
				<% Shared.analytics(request,response); %>
			</body>
		</html>
		<%
	}
}
%>