1 package sample.mailet;
2
3 import java.util.Collection;
4 import java.sql.*;
5 import javax.mail.*;
6 import javax.mail.internet.*;
7
8 import org.apache.avalon.cornerstone.services.datasource.*;
9 import org.apache.avalon.excalibur.datasource.DataSourceComponent;
10 import org.apache.avalon.framework.component.ComponentManager;
11 import org.apache.james.Constants;
12 import org.apache.james.util.JDBCUtil;
13 import org.apache.mailet.GenericMailet;
14 import org.apache.mailet.MailetContext;
15 import org.apache.mailet.Mail;
16 import org.apache.mailet.MailAddress;
17
18 public class SampleMailet extends GenericMailet {
19
20 protected DataSourceComponent datasource;
21 String sql;
22
23 // JDBC Helperクラス
24 private final JDBCUtil jdbcUtil = new JDBCUtil() {
25 protected void delegatedLog(String logString) {
26 log("SampleMailet: " + logString);
27 }
28 };
29
30
31 // Mailetの初期化.
32 public void init() throws MessagingException {
33 try {
34 sql = getInitParameter("sql"); // 初期パラメータからSQL文の取得
35
36 MailetContext mailetContext = getMailetContext();
37 // Avalonコンポーネントマネージャから、コネクションプール取得
38 ComponentManager componentManager=(ComponentManager)mailetContext
39 .getAttribute(Constants.AVALON_COMPONENT_MANAGER);
40 DataSourceSelector datasources = (DataSourceSelector)
41 componentManager.lookup(DataSourceSelector.ROLE);
42 datasource = (DataSourceComponent)datasources.select("sampledb");
43 } catch(Exception e) {
44 throw new MessagingException("Error getting datasource", e);
45 }
46 }
47
48
49 // イベント参加申し込みメールの処理.
50 public void service(Mail mail) throws MessagingException {
51
52 // 最初の宛先のみ取得
53 Collection recipients = mail.getRecipients();
54 MailAddress recipient = (MailAddress)recipients.iterator().next();
55 String request = recipient.getUser(); // ローカルパートを取得
56
57 // ユーザIDを取得
58 String hash = request.substring(request.indexOf("-")+1);
59 String id = hash; // 本来は、hashからユーザIDを取得する処理...
60 // 送信元のメールアドレス取得
61 String email = mail.getSender().toString();
62
63 // イベント参加者をデータベースに登録
64 Connection conn = null;
65 PreparedStatement stmt = null;
66 try {
67 conn = datasource.getConnection();
68 stmt = conn.prepareStatement(sql);
69 stmt.setString(1, id);
70 stmt.setString(2, email);
71 stmt.execute();
72 } catch(SQLException e) {
73 throw new MessagingException(e.toString());
74 } finally {
75 jdbcUtil.closeJDBCStatement(stmt);
76 jdbcUtil.closeJDBCConnection(conn); // connectionリリース
77 }
78
79 // Thanksメール送信
80 Session s=Session.getDefaultInstance(System.getProperties(), null);
81 MimeMessage thanx = new MimeMessage(s);
82 thanx.setFrom(new InternetAddress("admin@clubjames.jp"));
83 thanx.setRecipients(Message.RecipientType.TO, email);
84 thanx.setSubject("club:jamesイベント受け付け", "iso-2022-jp");
85 thanx.setText("イベント参加を受け付けました。","iso-2022-jp");
86 getMailetContext().sendMail(thanx);
87 }
88 }
|