Mercurial Hosting > nabble
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> + <% + } +} +%>