package open.dolphin.msg;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringWriter;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import java.util.logging.Logger;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import open.dolphin.infomodel.ActivityModel;
import open.dolphin.session.AccountSummary;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.exception.MethodInvocationException;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
public class OidSender {
private static final String GMAIL_ACCOUNT = "kazushi.minagawa@gmail.com";
private static final String GMAIL_PASSWD = "hanagui++";
private static final String MAIL_ENC = "ISO-2022-JP";
//s.oh^ 2014/07/08 クラウド0対応
//private static final String DOLPHIN_EMAIL_ADDRESS = "dolphin@digital-globe.co.jp";
//private static final String ACCOUNT_MAKING_RESULT = "OpenDolphinアカウント作成のお知らせ";
private static final String DG_DOLPHIN_EMAIL_ADDRESS = "dolphin@digital-globe.co.jp";
private static final String ACTIVITY_RESULT = "【使用量レポート】";
//s.oh$
private static final String DOLPHIN_EMAIL_ADDRESS = "dolphin@lscc.co.jp";
//s.oh^ 2014/07/08 クラウド0対応
//private static final String ACCOUNT_MAKING_RESULT = "DolphinProアカウント作成のお知らせ";
private static final String ACCOUNT_MAKING_RESULT = "OpenDolphinアカウント作成のお知らせ";
//s.oh$
private static final String MEMBER_TEMPLATE = "member-mail.vm";
private static final String TESTER_TEMPLATE = "account-mail.vm";
private static final String TEMPLATE_ENC = "SHIFT_JIS";
private static final String OBJECT_NAME = "account";
private static final String ASP_TESTER = "ASP_TESTER";
private static final String ASP_MEMBER = "ASP_MEMBER";
public void send(AccountSummary account) {
try {
VelocityContext context = VelocityHelper.getContext();
context.put(OBJECT_NAME, account);
StringWriter sw = new StringWriter();
//s.oh^ 2014/07/08 クラウド0対応
//BufferedWriter bw = new BufferedWriter(sw);
//
//// ライセンスのタイプでテンプレートを選択する
//if (account.getMemberType().equals(ASP_TESTER)) {
// Velocity.mergeTemplate(TESTER_TEMPLATE, TEMPLATE_ENC, context, bw);
//} else if (account.getMemberType().equals(ASP_MEMBER)) {
// Velocity.mergeTemplate(MEMBER_TEMPLATE, TEMPLATE_ENC, context, bw);
//}
//
//bw.flush();
//bw.close();
//String body = sw.toString();
//
//Properties props = new Properties();
//// gmail -------------------------------
///*props.put("mail.smtp.host", "smtp.gmail.com");
//props.put("mail.smtp.socketFactory.port", "465");
//props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
//props.put("mail.smtp.auth", "true");
//props.put("mail.smtp.port", "465");*/
//
//props.put("mail.smtp.host", "mails.lscc.co.jp");
////props.put("mail.smtp.socketFactory.port", "465");
////props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
//props.put("mail.smtp.auth", "true");
//props.put("mail.smtp.port", "25");
//// id: dolphin
//// pass: dolphin
////--------------------------------------
try (BufferedWriter bw = new BufferedWriter(sw)) {
// ライセンスのタイプでテンプレートを選択する
switch (account.getMemberType()) {
case ASP_TESTER:
Velocity.mergeTemplate(TESTER_TEMPLATE, TEMPLATE_ENC, context, bw);
break;
case ASP_MEMBER:
Velocity.mergeTemplate(MEMBER_TEMPLATE, TEMPLATE_ENC, context, bw);
break;
}
bw.flush();
}
String body = sw.toString();
Properties props = this.getMailProperties();
//s.oh$
Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
//return new PasswordAuthentication(GMAIL_ACCOUNT,GMAIL_PASSWD);
return new PasswordAuthentication("dolphin","dolphin");
}
});
javax.mail.internet.MimeMessage mimeMessage = new javax.mail.internet.MimeMessage(session);
mimeMessage.setFrom(new InternetAddress(DOLPHIN_EMAIL_ADDRESS));
mimeMessage.setRecipients(javax.mail.Message.RecipientType.TO, InternetAddress.parse(account.getUserEmail()));
mimeMessage.addRecipients(RecipientType.BCC, DOLPHIN_EMAIL_ADDRESS);
mimeMessage.setSubject(ACCOUNT_MAKING_RESULT, MAIL_ENC);
mimeMessage.setText(body, MAIL_ENC);
Transport.send(mimeMessage);
} catch (IOException | ResourceNotFoundException | ParseErrorException | MethodInvocationException | MessagingException e) {
e.printStackTrace(System.err);
Logger.getLogger("open.dolphin").warning(e.getMessage());
}
}
//s.oh^ 2014/07/08 クラウド0対応
public void sendActivity(ActivityModel ams[]) {
ActivityModel am = ams[0];
ActivityModel total = ams[1];
Properties config = new Properties();
StringBuilder path = new StringBuilder();
path.append(System.getProperty("jboss.home.dir"));
path.append(File.separator);
path.append("custom.properties");
File f = new File(path.toString());
try {
FileInputStream fin = new FileInputStream(f);
try (InputStreamReader r = new InputStreamReader(fin, "JISAutoDetect")) {
config.load(r);
}
} catch (IOException ex) {
ex.printStackTrace(System.err);
throw new RuntimeException(ex.getMessage());
}
String mailFrom = config.getProperty("cloud.zero.mail.from");
if(mailFrom == null || mailFrom.length() <= 0) {
mailFrom = DOLPHIN_EMAIL_ADDRESS;
}
String mailTo = config.getProperty("cloud.zero.mail.to");
if(mailTo == null || mailTo.length() <= 0) {
mailTo = DOLPHIN_EMAIL_ADDRESS;
}
final String account = config.getProperty("cloud.zero.mail.account");
final String password = config.getProperty("cloud.zero.mail.password");
try {
// 本文
StringBuilder sb = new StringBuilder();
sb.append("集計期間=").append(targetDateFromDate(am.getFromDate())).append("~").append(targetDateFromDate(am.getToDate())).append("\n");
sb.append("------------------------------------").append("\n");
sb.append("医療機関ID=").append(total.getFacilityId()).append("\n");
sb.append("医療機関名=").append(total.getFacilityName()).append("\n");
sb.append("郵便番号=").append(total.getFacilityZip()).append("\n");
sb.append("住所=").append(total.getFacilityAddress()).append("\n");
sb.append("電話=").append(total.getFacilityTelephone()).append("\n");
sb.append("FAX=").append(total.getFacilityFacimile()).append("\n");
sb.append("利用者数=").append(total.getNumOfUsers()).append("\n");
sb.append("************************************").append("\n");
sb.append("患者登録数= ").append(formatNumber(am.getNumOfPatients())).append(" / ").append(formatNumber(total.getNumOfPatients())).append("\n");
sb.append("来院数= ").append(formatNumber(am.getNumOfPatientVisits())).append(" / ").append(formatNumber(total.getNumOfPatientVisits())).append("\n");
sb.append("病名数= ").append(formatNumber(am.getNumOfDiagnosis())).append(" / ").append(formatNumber(total.getNumOfDiagnosis())).append("\n");
sb.append("カルテ枚数= ").append(formatNumber(am.getNumOfKarte())).append(" / ").append(formatNumber(total.getNumOfKarte())).append("\n");
sb.append("画像数= ").append(formatNumber(am.getNumOfImages())).append(" / ").append(formatNumber(total.getNumOfImages())).append("\n");
sb.append("添付文書数= ").append(formatNumber(am.getNumOfAttachments())).append(" / ").append(formatNumber(total.getNumOfAttachments())).append("\n");
sb.append("紹介状数= ").append(formatNumber(am.getNumOfLetters())).append(" / ").append(formatNumber(total.getNumOfLetters())).append("\n");
sb.append("検査数= ").append(formatNumber(am.getNumOfLabTests())).append(" / ").append(formatNumber(total.getNumOfLabTests())).append("\n");
sb.append("************************************").append("\n");
sb.append("データベース容量= ").append(total.getDbSize()).append("\n");
sb.append("IPアドレス= ").append(total.getBindAddress()).append("\n");
sb.append("\n");
sb.append("*** 集計期間数/総数 を表示").append("\n");
String body = sb.toString();
// Session
//Properties props = this.getGmailProperties();
Properties props = new Properties();
props.put("mail.smtp.host", config.getProperty("cloud.zero.mail.host"));
props.put("mail.smtp.auth", config.getProperty("cloud.zero.mail.auth"));
props.put("mail.smtp.port", config.getProperty("cloud.zero.mail.port"));
Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
//return new PasswordAuthentication(GMAIL_ACCOUNT,GMAIL_PASSWD);
return new PasswordAuthentication(account, password);
//return new PasswordAuthentication("dolphin","dolphin");
}
});
// Message
javax.mail.internet.MimeMessage mimeMessage = new javax.mail.internet.MimeMessage(session);
// 差出人
mimeMessage.setFrom(new InternetAddress(mailFrom));
// 宛先
InternetAddress[] addressTo = new InternetAddress[1];
addressTo[0] = new InternetAddress(mailTo);
mimeMessage.setRecipients(javax.mail.Message.RecipientType.TO, addressTo);
// BCC
mimeMessage.addRecipients(RecipientType.BCC, DG_DOLPHIN_EMAIL_ADDRESS);
// Title
sb = new StringBuilder();
//sb.append(ACTIVITY_RESULT).append(this.reportDateFromDate(am.getFromDate())).append("-").append(am.getFacilityName());
sb.append(ACTIVITY_RESULT).append(this.reportDateFromDate(am.getFromDate())).append("-").append(total.getFacilityName());
mimeMessage.setSubject(sb.toString(), MAIL_ENC);
mimeMessage.setText(body, MAIL_ENC);
Transport.send(mimeMessage);
} catch (ResourceNotFoundException | ParseErrorException | MethodInvocationException | MessagingException e) {
e.printStackTrace(System.err);
Logger.getLogger("open.dolphin").warning(e.getMessage());
}
}
private Properties getGmailProperties() {
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
return props;
}
private Properties getMailProperties() {
Properties props = new Properties();
props.put("mail.smtp.host", "mails.lscc.co.jp");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "25");
return props;
}
private String targetDateFromDate(Date d) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy'年'MM'月'dd'日'");
return sdf.format(d);
}
private String reportDateFromDate(Date d) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy'年'MM'月'");
return sdf.format(d);
}
private String formatNumber(long num) {
NumberFormat nf = NumberFormat.getNumberInstance();
return nf.format(num);
}
//s.oh$
}