view src/nabble/view/web/user/SendEmail.java @ 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();
			}
		}
		
		out.print( "\r\n<html>\r\n	<head>\r\n		" );
 Shared.title(request,response,"Send Email to "+HtmlUtils.htmlEncode(emailDisp)); 
		out.print( "\r\n		<style type=\"text/css\">\r\n			div.field-title {\r\n				margin-top: 0;\r\n			}\r\n		</style>\r\n		<script type=\"text/javascript\">\r\n			$(document).ready(\r\n				function() {\r\n					Nabble.get(\"nabble.subject\").focus();\r\n				}\r\n			);\r\n		</script>\r\n		" );
		out.print( ( Recaptcha.JS ) );
		out.print( "\r\n	</head>\r\n	<body>\r\n		" );
 Shared.minHeaderGlobal(request,response); 
		out.print( "\r\n		<h1>Send Email to " );
		out.print( (HtmlUtils.htmlEncode(emailDisp)) );
		out.print( "</h1>\r\n\r\n		" );
 Shared.errorMessage(request,response,errorMsg,"Please fix the error and try again.");
		out.print( "\r\n		<form method=\"post\">\r\n			<input type=\"hidden\" name=\"type\" value=\"" );
		out.print( (type) );
		out.print( "\">\r\n			" );

					for (String name : paramNames) {
						
		out.print( "\r\n<input type=\"hidden\" name=\"" );
		out.print( (name) );
		out.print( "\" value=\"" );
		out.print( (request.getParameter(name)) );
		out.print( "\">\r\n" );

					}
					
		out.print( "\r\n\r\n<div class=\"field-box light-border-color\">\r\n	<div class=\"second-font field-title\">Email Subject</div>\r\n	<div class=\"weak-color\">\r\n		<input name=\"subject\" id=\"nabble.subject\" size=\"70\" value=\"" );
		out.print( (Jtp.hideNull(subject)) );
		out.print( "\" tabindex=\"1\">\r\n	</div>\r\n</div>\r\n\r\n<div class=\"field-box light-border-color\">\r\n	<div class=\"second-font field-title\">Message</div>\r\n	<div class=\"weak-color\">\r\n		<textarea style=\"width:40em; height: 150px;\" name=\"message\" wrap=\"SOFT\" tabindex=\"2\">" );
		out.print( (HtmlUtils.htmlEncode(Jtp.hideNull(message))) );
		out.print( "</textarea>\r\n	</div>\r\n</div>\r\n\r\n<table style=\"margin-bottom:1em\">\r\n	<tr>\r\n		<td><input id=\"cc\" type=\"checkbox\" name=\"cc\" value=\"y\" /></td>\r\n		<td><label for=\"cc\">Send a copy of this message to me</label></td>\r\n	</tr>\r\n</table>\r\n\r\n" );
		out.print( ( Recaptcha.DIV ) );
		out.print( "<br>\r\n\r\n<input type=\"submit\" name=\"send\" value=\"Send Email\" />\r\n</form>\r\n\r\n" );
 Shared.returnToJs(request,response); 
		out.print( "\r\n\r\n" );
 Shared.footer(request,response); 
		out.print( "\r\n" );
 Shared.analytics(request,response); 
		out.print( "\r\n</body>\r\n</html>\r\n" );

	}
}