diff --git a/students/63072784/pom.xml b/students/63072784/pom.xml new file mode 100644 index 0000000000..4c78ba51ac --- /dev/null +++ b/students/63072784/pom.xml @@ -0,0 +1,16 @@ + + + 4.0.0 + + com.jimmykwong + coding2017 + 1.0-SNAPSHOT + + + 1.8 + 1.8 + + + \ No newline at end of file diff --git a/students/63072784/src/main/java/ood/srp/Configuration.java b/students/63072784/src/main/java/ood/srp/Configuration.java new file mode 100644 index 0000000000..eb315dd7e3 --- /dev/null +++ b/students/63072784/src/main/java/ood/srp/Configuration.java @@ -0,0 +1,29 @@ +package ood.srp; + +import java.util.HashMap; +import java.util.Map; + +public class Configuration { + + static Map configurations = new HashMap<>(); + + static { + configurations.put(ConfigurationKeys.SMTP_SERVER, "smtp.163.com"); + configurations.put(ConfigurationKeys.ALT_SMTP_SERVER, "smtp1.163.com"); + configurations.put(ConfigurationKeys.EMAIL_ADMIN, "admin@company.com"); + configurations.put(ConfigurationKeys.EMAIL_ADMIN_PASSWORD, "admin!"); + configurations.put(ConfigurationKeys.EMAIL_PORT, "25"); + } + + /** + * 应该从配置文件读, 但是这里简化为直接从一个map 中去读 + * + * @param key + * @return + */ + public String getProperty(String key) { + + return configurations.get(key); + } + +} diff --git a/students/63072784/src/main/java/ood/srp/ConfigurationKeys.java b/students/63072784/src/main/java/ood/srp/ConfigurationKeys.java new file mode 100644 index 0000000000..168ee4a304 --- /dev/null +++ b/students/63072784/src/main/java/ood/srp/ConfigurationKeys.java @@ -0,0 +1,11 @@ +package ood.srp; + +public class ConfigurationKeys { + + public static final String SMTP_SERVER = "smtp.server"; + public static final String ALT_SMTP_SERVER = "alt.smtp.server"; + public static final String EMAIL_ADMIN = "email.admin"; + public static final String EMAIL_PORT = "email.port"; + public static final String EMAIL_ADMIN_PASSWORD = "email.admin.password"; + +} diff --git a/students/63072784/src/main/java/ood/srp/DBUtil.java b/students/63072784/src/main/java/ood/srp/DBUtil.java new file mode 100644 index 0000000000..86c9ab9102 --- /dev/null +++ b/students/63072784/src/main/java/ood/srp/DBUtil.java @@ -0,0 +1,23 @@ +package ood.srp; + +import java.util.ArrayList; +import java.util.List; + +public class DBUtil { + + /** + * 应该从数据库读, 但是简化为直接生成。 + * + * @param sql + * @return + */ + public static List query(String sql) { + System.out.printf("执行sql=" + sql); + List userList = new ArrayList<>(); + for (int i = 1; i <= 3; i++) { + UserInfo userInfo = new UserInfo("User" + i, "aa@bb.com"); + userList.add(userInfo); + } + return userList; + } +} diff --git a/students/63072784/src/main/java/ood/srp/Mail.java b/students/63072784/src/main/java/ood/srp/Mail.java new file mode 100644 index 0000000000..db08647d9a --- /dev/null +++ b/students/63072784/src/main/java/ood/srp/Mail.java @@ -0,0 +1,50 @@ +package ood.srp; + +/** + * Created by jimmy on 6/20/2017. + */ +public class Mail { + private MailAccount mailAccount; + private String toAddress; + private String subject; + private String message; + + public Mail(MailAccount mailAccount, String toAddress, String subject, String message) { + this.mailAccount = mailAccount; + this.toAddress = toAddress; + this.subject = subject; + this.message = message; + } + + public MailAccount getMailAccount() { + return mailAccount; + } + + public void setMailAccount(MailAccount mailAccount) { + this.mailAccount = mailAccount; + } + + public String getToAddress() { + return toAddress; + } + + public void setToAddress(String toAddress) { + this.toAddress = toAddress; + } + + public String getSubject() { + return subject; + } + + public void setSubject(String subject) { + this.subject = subject; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/students/63072784/src/main/java/ood/srp/MailAccount.java b/students/63072784/src/main/java/ood/srp/MailAccount.java new file mode 100644 index 0000000000..f0aaf3ee49 --- /dev/null +++ b/students/63072784/src/main/java/ood/srp/MailAccount.java @@ -0,0 +1,42 @@ +package ood.srp; + +/** + * Created by jimmy on 6/20/2017. + */ +public class MailAccount { + private String smtpHost; + private String altSmtpHost; + private int port; + private String account; + private String password; + + public static MailAccount buildAccount(Configuration config) { + MailAccount mailAccount = new MailAccount(); + mailAccount.smtpHost = config.getProperty(ConfigurationKeys.SMTP_SERVER); + mailAccount.altSmtpHost = config.getProperty(ConfigurationKeys.ALT_SMTP_SERVER); + mailAccount.port = Integer.parseInt(config.getProperty(ConfigurationKeys.EMAIL_PORT)); + mailAccount.account = config.getProperty(ConfigurationKeys.EMAIL_ADMIN); + mailAccount.password = config.getProperty(ConfigurationKeys.EMAIL_ADMIN_PASSWORD); + return mailAccount; + } + + public String getSmtpHost() { + return smtpHost; + } + + public String getAltSmtpHost() { + return altSmtpHost; + } + + public int getPort() { + return port; + } + + public String getAccount() { + return account; + } + + public String getPassword() { + return password; + } +} diff --git a/students/63072784/src/main/java/ood/srp/MailUtil.java b/students/63072784/src/main/java/ood/srp/MailUtil.java new file mode 100644 index 0000000000..0e4d135252 --- /dev/null +++ b/students/63072784/src/main/java/ood/srp/MailUtil.java @@ -0,0 +1,35 @@ +package ood.srp; + +public class MailUtil { + + public static void sendEmail(Mail mail, boolean debug) { + String toAddress = mail.getToAddress(); + String fromAddress = mail.getMailAccount().getAccount(); + String subject = mail.getSubject(); + String message = mail.getMessage(); + String smtpHost = mail.getMailAccount().getSmtpHost(); + String altSmtpHost = mail.getMailAccount().getAltSmtpHost(); + try { + sendEmail(toAddress, fromAddress, subject, message, smtpHost, debug); + } catch (Exception e) { + try { + MailUtil.sendEmail(toAddress, fromAddress, subject, message, altSmtpHost, debug); + + } catch (Exception e2) { + System.out.println("通过备用 SMTP服务器发送邮件失败: " + e2.getMessage()); + } + } + + } + + private static void sendEmail(String toAddress, String fromAddress, String subject, String message, String smtpHost, + boolean debug) { + //假装发了一封邮件 + StringBuilder buffer = new StringBuilder(); + buffer.append("From:").append(fromAddress).append("\n"); + buffer.append("To:").append(toAddress).append("\n"); + buffer.append("Subject:").append(subject).append("\n"); + buffer.append("Content:").append(message).append("\n"); + System.out.println(buffer.toString()); + } +} diff --git a/students/63072784/src/main/java/ood/srp/Product.java b/students/63072784/src/main/java/ood/srp/Product.java new file mode 100644 index 0000000000..3e6b36b671 --- /dev/null +++ b/students/63072784/src/main/java/ood/srp/Product.java @@ -0,0 +1,54 @@ +package ood.srp; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; + +/** + * Created by jimmy on 6/20/2017. + */ +public class Product { + private String productId; + private String productDesc; + + public static Product getPromotionProduct(File file) throws Exception { + BufferedReader br = null; + try { + br = new BufferedReader(new FileReader(file)); + String temp = br.readLine(); + String[] data = temp.split(" "); + + String productId = data[0]; + String productDesc = data[1]; + + System.out.println("产品ID = " + productId + "\n"); + System.out.println("产品描述 = " + productDesc + "\n"); + + Product product = new Product(); + product.productId = productId; + product.productDesc = productDesc; + return product; + } catch (IOException e) { + throw new IOException(e.getMessage()); + } finally { + br.close(); + } + } + + public String getProductId() { + return productId; + } + + public void setProductId(String productId) { + this.productId = productId; + } + + public String getProductDesc() { + return productDesc; + } + + public void setProductDesc(String productDesc) { + this.productDesc = productDesc; + } +} diff --git a/students/63072784/src/main/java/ood/srp/PromotionMail.java b/students/63072784/src/main/java/ood/srp/PromotionMail.java new file mode 100644 index 0000000000..f6646fac14 --- /dev/null +++ b/students/63072784/src/main/java/ood/srp/PromotionMail.java @@ -0,0 +1,64 @@ +package ood.srp; + +import java.io.File; +import java.util.List; + +public class PromotionMail { + + + private static final String SUBJECT = "您关注的商品降价了"; + + public static void main(String[] args) throws Exception { + //这里可以做成参数输入 + File f = new File(PromotionMail.class.getClassLoader().getResource("product_promotion.txt").toURI()); + boolean debug = true; + PromotionMail pe = new PromotionMail(); + pe.sendEMails(f, debug); + } + + + public PromotionMail() { + } + + private String buildMessage(UserInfo userInfo, Product product) { + return String.format("尊敬的 %s, 您关注的产品 %s 降价了,欢迎购买!", userInfo.getName(), product.getProductDesc()); + } + + private Mail buildMail(MailAccount mailAccount, UserInfo userInfo, Product product) { + //可以更加详细的检查 + if (mailAccount == null || userInfo == null || product == null) { + return null; + } else { + String message = buildMessage(userInfo, product); + return new Mail(mailAccount, userInfo.getEmailAddress(), SUBJECT, message); + } + } + + + private void sendEMails(File file, boolean debug) throws Exception { + + //构建发送邮件账号 + MailAccount mailAccount = MailAccount.buildAccount(new Configuration()); + + //读取降价列表 + Product product = Product.getPromotionProduct(file); + + //获取订阅用户列表 + List userInfoList = UserInfo.getUserInfo(product.getProductId()); + + System.out.println("开始发送邮件"); + + if (userInfoList != null) { + for (UserInfo userInfo : userInfoList) { + Mail mail = buildMail(mailAccount, userInfo, product); + if (mail == null) { + continue; + } + MailUtil.sendEmail(mail, debug); + } + } else { + System.out.println("没有邮件发送"); + + } + } +} diff --git a/students/63072784/src/main/java/ood/srp/UserInfo.java b/students/63072784/src/main/java/ood/srp/UserInfo.java new file mode 100644 index 0000000000..3387dcb1bc --- /dev/null +++ b/students/63072784/src/main/java/ood/srp/UserInfo.java @@ -0,0 +1,41 @@ +package ood.srp; + +import java.util.List; + +/** + * Created by jimmy on 6/20/2017. + */ +public class UserInfo { + private String name; + private String emailAddress; + + public UserInfo(String name, String emailAddress) { + this.name = name; + this.emailAddress = emailAddress; + } + + private static final String QUERY_PRODUCT = "Select name from subscriptions " + + "where product_id= '%s' " + + "and send_mail=1 "; + + public static List getUserInfo(String productId) { + System.out.println("loadQuery set"); + return DBUtil.query(String.format(QUERY_PRODUCT, productId)); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEmailAddress() { + return emailAddress; + } + + public void setEmailAddress(String emailAddress) { + this.emailAddress = emailAddress; + } +} diff --git a/students/63072784/src/main/resources/product_promotion.txt b/students/63072784/src/main/resources/product_promotion.txt new file mode 100644 index 0000000000..b7a974adb3 --- /dev/null +++ b/students/63072784/src/main/resources/product_promotion.txt @@ -0,0 +1,4 @@ +P8756 iPhone8 +P3946 XiaoMi10 +P8904 Oppo_R15 +P4955 Vivo_X20 \ No newline at end of file