Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions students/63072784/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.jimmykwong</groupId>
<artifactId>coding2017</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>

</project>
29 changes: 29 additions & 0 deletions students/63072784/src/main/java/ood/srp/Configuration.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package ood.srp;

import java.util.HashMap;
import java.util.Map;

public class Configuration {

static Map<String, String> 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);
}

}
11 changes: 11 additions & 0 deletions students/63072784/src/main/java/ood/srp/ConfigurationKeys.java
Original file line number Diff line number Diff line change
@@ -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";

}
23 changes: 23 additions & 0 deletions students/63072784/src/main/java/ood/srp/DBUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package ood.srp;

import java.util.ArrayList;
import java.util.List;

public class DBUtil {

/**
* 应该从数据库读, 但是简化为直接生成。
*
* @param sql
* @return
*/
public static List<UserInfo> query(String sql) {
System.out.printf("执行sql=" + sql);
List<UserInfo> userList = new ArrayList<>();
for (int i = 1; i <= 3; i++) {
UserInfo userInfo = new UserInfo("User" + i, "aa@bb.com");
userList.add(userInfo);
}
return userList;
}
}
50 changes: 50 additions & 0 deletions students/63072784/src/main/java/ood/srp/Mail.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
42 changes: 42 additions & 0 deletions students/63072784/src/main/java/ood/srp/MailAccount.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
35 changes: 35 additions & 0 deletions students/63072784/src/main/java/ood/srp/MailUtil.java
Original file line number Diff line number Diff line change
@@ -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());
}
}
54 changes: 54 additions & 0 deletions students/63072784/src/main/java/ood/srp/Product.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
64 changes: 64 additions & 0 deletions students/63072784/src/main/java/ood/srp/PromotionMail.java
Original file line number Diff line number Diff line change
@@ -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<UserInfo> 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("没有邮件发送");

}
}
}
41 changes: 41 additions & 0 deletions students/63072784/src/main/java/ood/srp/UserInfo.java
Original file line number Diff line number Diff line change
@@ -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<UserInfo> 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;
}
}
4 changes: 4 additions & 0 deletions students/63072784/src/main/resources/product_promotion.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
P8756 iPhone8
P3946 XiaoMi10
P8904 Oppo_R15
P4955 Vivo_X20