comparison 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
comparison
equal deleted inserted replaced
-1:000000000000 0:7ecd1a4ef557
1 <%
2 package nabble.view.web.user;
3
4 import fschmidt.util.java.HtmlUtils;
5 import fschmidt.util.mail.Mail;
6 import fschmidt.util.mail.MailAddress;
7 import fschmidt.util.mail.MailException;
8 import fschmidt.util.mail.MailHome;
9 import fschmidt.util.mail.PlainTextContent;
10 import nabble.model.Message;
11 import nabble.model.ModelException;
12 import nabble.model.ModelHome;
13 import nabble.model.Node;
14 import nabble.model.Site;
15 import nabble.model.User;
16 import nabble.view.lib.Jtp;
17 import nabble.view.lib.Shared;
18 import nabble.view.lib.Recaptcha;
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
21
22 import javax.servlet.ServletException;
23 import javax.servlet.http.HttpServlet;
24 import javax.servlet.http.HttpServletRequest;
25 import javax.servlet.http.HttpServletResponse;
26 import java.io.IOException;
27 import java.io.PrintWriter;
28 import java.util.HashSet;
29 import java.util.Set;
30
31
32 public final class SendEmail extends HttpServlet {
33 private static final Logger logger = LoggerFactory.getLogger(SendEmail.class);
34
35 protected void service(HttpServletRequest request,HttpServletResponse response)
36 throws ServletException, IOException
37 {
38 PrintWriter out = response.getWriter();
39 User user = Jtp.getUser(request,response);
40 if( user==null ) {
41 Jtp.login("You must login to send an email.",request,response);
42 return;
43 }
44 String type = request.getParameter("type");
45 String emailTo;
46 String emailDisp;
47 String subject = request.getParameter("subject");
48 String message = request.getParameter("message");
49 Set<String> paramNames = new HashSet<String>();
50 if( type.equals("email") ) {
51 emailTo = request.getParameter("email");
52 emailDisp = ModelHome.hideEmail(emailTo);
53 paramNames.add("email");
54 } else if( type.equals("user") ) {
55 User to = Jtp.getSite(request).getUser(Long.parseLong(request.getParameter("user")));
56 emailTo = to.getEmail();
57 emailDisp = to.getName();
58 paramNames.add("user");
59 } else if( type.equals("node") ) {
60 Node node = Jtp.getSiteNotNull(request).getNode(Long.parseLong(request.getParameter("node")));
61 int i = Integer.parseInt(request.getParameter("i"));
62 emailTo = node.getMessage().getEmail(i);
63 emailDisp = ModelHome.hideEmail(emailTo);
64 paramNames.add("node");
65 paramNames.add("i");
66 } else if( type.equals("sig") ) {
67 User to = Jtp.getSite(request).getUser(Long.parseLong(request.getParameter("user")));
68 int i = Integer.parseInt(request.getParameter("i"));
69 emailTo = to.getSignature().getEmail(i);
70 emailDisp = ModelHome.hideEmail(emailTo);
71 paramNames.add("user");
72 paramNames.add("i");
73 } else if( type.equals("pm") ) {
74 Node post = Jtp.getSiteNotNull(request).getNode(Long.parseLong(request.getParameter("post")));
75 User to = (User)post.getOwner();
76 emailTo = to.getEmail();
77 emailDisp = to.getName();
78 if( subject==null ) {
79 subject = post.getSubject();
80 String original =
81 "\n<quote author='" + post.getOwner().getNameHtml() + "'>\n"
82 + post.getMessage().getText() + "\n"
83 + "</quote>\n"
84 + "Quoted from: " + Jtp.url(post) + "\n"
85 ;
86 message = Message.wrapQuoteText(original);
87 }
88 paramNames.add("post");
89 } else {
90 throw new RuntimeException("type="+type);
91 }
92 String errorMsg = null;
93
94 if( request.getParameter("send") != null && "POST".equals(request.getMethod()) ) {
95 try {
96 Recaptcha.check(request);
97
98 Site site = Jtp.getSite(request);
99 if (site != null) {
100 message += "\n\n_____________________________________\nSent from " + site.getBaseUrl() + "\n\n";
101 }
102
103 Mail mail = MailHome.newMail();
104 mail.setFrom( new MailAddress(user.getEmail()) );
105 mail.setTo( new MailAddress(emailTo) );
106 mail.setSubject(subject);
107 mail.setContent( new PlainTextContent(message) );
108 ModelHome.send(mail);
109 if( request.getParameter("cc") != null ) {
110 mail = MailHome.newMail();
111 mail.setFrom( new MailAddress(user.getEmail()) );
112 mail.setTo( new MailAddress(user.getEmail()) );
113 mail.setSubject(subject);
114 mail.setContent( new PlainTextContent(message) );
115 ModelHome.send(mail);
116 }
117 logger.info(
118 "From: " + user.getEmail() + " (user ID=" + user.getId() + ")\n" +
119 "To: " + emailTo + '\n' +
120 "Subject: " + subject + '\n' + message +
121 "\n------------------------------------------------------------\n"
122 );
123 response.sendRedirect("SendEmail2.jtp?to=" + HtmlUtils.urlEncode(emailDisp));
124 return;
125 } catch(MailException e) {
126 logger.warn("",e);
127 errorMsg = e.getMessage();
128 } catch (ModelException.InvalidRecaptcha e) {
129 logger.warn("",e);
130 errorMsg = e.getMessage();
131 }
132 }
133 %>
134 <html>
135 <head>
136 <% Shared.title(request,response,"Send Email to "+HtmlUtils.htmlEncode(emailDisp)); %>
137 <style type="text/css">
138 div.field-title {
139 margin-top: 0;
140 }
141 </style>
142 <script type="text/javascript">
143 $(document).ready(
144 function() {
145 Nabble.get("nabble.subject").focus();
146 }
147 );
148 </script>
149 <%= Recaptcha.JS %>
150 </head>
151 <body>
152 <% Shared.minHeaderGlobal(request,response); %>
153 <h1>Send Email to <%=HtmlUtils.htmlEncode(emailDisp)%></h1>
154
155 <% Shared.errorMessage(request,response,errorMsg,"Please fix the error and try again.");%>
156 <form method="post">
157 <input type="hidden" name="type" value="<%=type%>">
158 <%
159 for (String name : paramNames) {
160 %>
161 <input type="hidden" name="<%=name%>" value="<%=request.getParameter(name)%>">
162 <%
163 }
164 %>
165
166 <div class="field-box light-border-color">
167 <div class="second-font field-title">Email Subject</div>
168 <div class="weak-color">
169 <input name="subject" id="nabble.subject" size="70" value="<%=Jtp.hideNull(subject)%>" tabindex="1">
170 </div>
171 </div>
172
173 <div class="field-box light-border-color">
174 <div class="second-font field-title">Message</div>
175 <div class="weak-color">
176 <textarea style="width:40em; height: 150px;" name="message" wrap="SOFT" tabindex="2"><%=HtmlUtils.htmlEncode(Jtp.hideNull(message))%></textarea>
177 </div>
178 </div>
179
180 <table style="margin-bottom:1em">
181 <tr>
182 <td><input id="cc" type="checkbox" name="cc" value="y" /></td>
183 <td><label for="cc">Send a copy of this message to me</label></td>
184 </tr>
185 </table>
186
187 <%= Recaptcha.DIV %><br>
188
189 <input type="submit" name="send" value="Send Email" />
190 </form>
191
192 <% Shared.returnToJs(request,response); %>
193
194 <% Shared.footer(request,response); %>
195 <% Shared.analytics(request,response); %>
196 </body>
197 </html>
198 <%
199 }
200 }
201 %>