diff src/nabble/view/web/user/SendEmail.jtp @ 0:7ecd1a4ef557

add content
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 21 Mar 2019 19:15:52 -0600
parents
children e79c7d4dcd7a
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/nabble/view/web/user/SendEmail.jtp	Thu Mar 21 19:15:52 2019 -0600
@@ -0,0 +1,201 @@
+<%
+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 " + site.getBaseUrl() + "\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>
+		<%
+	}
+}
+%>