0
|
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) {
|
4
|
100 message += "\n\n_____________________________________\nSent from " + Jtp.getBaseUrl(request) + "\n\n";
|
0
|
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 %>
|