<orderEntry type="library" name="Gradle: __local_aars__:D.\Snicker\icsupport\app\libs\ftp4j-1.7.2.jar:unspecified@jar" level="project"/>\r
<orderEntry type="library" name="Gradle: __local_aars__:D.\Snicker\icsupport\app\libs\log4j-1.2.17.jar:unspecified@jar" level="project"/>\r
<orderEntry type="library" name="Gradle: __local_aars__:D.\Snicker\icsupport\app\libs\okio-2.4.3.jar:unspecified@jar" level="project"/>\r
+ <orderEntry type="library" name="Gradle: __local_aars__:D.\Snicker\icsupport\app\libs\mail.jar:unspecified@jar" level="project"/>\r
+ <orderEntry type="library" name="Gradle: __local_aars__:D.\Snicker\icsupport\app\libs\activation.jar:unspecified@jar" level="project"/>\r
+ <orderEntry type="library" name="Gradle: __local_aars__:D.\Snicker\icsupport\app\libs\additionnal.jar:unspecified@jar" level="project"/>\r
<orderEntry type="library" name="Gradle: __local_aars__:D.\Snicker\icsupport\app\libs\frameworks-full-debug.jar:unspecified@jar" level="project"/>\r
<orderEntry type="library" name="Gradle: __local_aars__:D.\Snicker\icsupport\app\libs\telephony_common-full-debug.jar:unspecified@jar" level="project"/>\r
<orderEntry type="library" name="Gradle: com.android.support.constraint:constraint-layout-solver:1.1.3@jar" level="project"/>\r
dependencies {
compileOnly files ('libs/frameworks-full-debug.jar')
provided files ('libs/telephony_common-full-debug.jar')
+
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
//compile fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
testCompile 'junit:junit:4.12'
implementation project(path: ':dNSCache')
implementation 'com.android.support:recyclerview-v7:25.1.0'
- compile files ('libs/android-logging-log4j-1.0.3.jar','libs/ftp4j-1.7.2.jar','libs/log4j-1.2.17.jar','libs/okio-2.4.3.jar')
+ compile files ('libs/android-logging-log4j-1.0.3.jar','libs/ftp4j-1.7.2.jar','libs/log4j-1.2.17.jar','libs/okio-2.4.3.jar' )
+ compile files ('libs/mail.jar' )
+ compile files ('libs/activation.jar','libs/additionnal.jar' )
// implementation "androidx.recyclerview:recyclerview:1.1.0
--- /dev/null
+package SendEmail;
+
+/**
+* 发送邮件需要使用的基本信息
+*
+*/
+import java.util.Properties;
+public class MailSenderInfo {
+ // 发送邮件的服务器的IP和端口
+ private String mailServerHost;
+ private String mailServerPort = "25";
+ // 邮件发送者的地址
+ private String fromAddress;
+ // 邮件接收者的地址
+ private String toAddress;
+ // 登陆邮件发送服务器的用户名和密码
+ private String userName;
+ private String password;
+ // 是否需要身份验证
+ private boolean validate = false;
+ // 邮件主题
+ private String subject;
+ // 邮件的文本内容
+ private String content;
+ // 邮件附件的文件名
+ private String[] attachFileNames;
+ /**
+ * 获得邮件会话属性
+ */
+ public Properties getProperties(){
+ Properties p = new Properties();
+ p.put("mail.smtp.host", this.mailServerHost);
+ p.put("mail.smtp.port", this.mailServerPort);
+ p.put("mail.smtp.auth", validate ? "true" : "false");
+ return p;
+ }
+ public String getMailServerHost() {
+ return mailServerHost;
+ }
+ public void setMailServerHost(String mailServerHost) {
+ this.mailServerHost = mailServerHost;
+ }
+ public String getMailServerPort() {
+ return mailServerPort;
+ }
+ public void setMailServerPort(String mailServerPort) {
+ this.mailServerPort = mailServerPort;
+ }
+ public boolean isValidate() {
+ return validate;
+ }
+ public void setValidate(boolean validate) {
+ this.validate = validate;
+ }
+ public String[] getAttachFileNames() {
+ return attachFileNames;
+ }
+ public void setAttachFileNames(String[] fileNames) {
+ this.attachFileNames = fileNames;
+ }
+ public String getFromAddress() {
+ return fromAddress;
+ }
+ public void setFromAddress(String fromAddress) {
+ this.fromAddress = fromAddress;
+ }
+ public String getPassword() {
+ return password;
+ }
+ public void setPassword(String password) {
+ this.password = password;
+ }
+ public String getToAddress() {
+ return toAddress;
+ }
+ public void setToAddress(String toAddress) {
+ this.toAddress = toAddress;
+ }
+ public String getUserName() {
+ return userName;
+ }
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+ public String getSubject() {
+ return subject;
+ }
+ public void setSubject(String subject) {
+ this.subject = subject;
+ }
+ public String getContent() {
+ return content;
+ }
+ public void setContent(String textContent) {
+ this.content = textContent;
+ }
+}
--- /dev/null
+package SendEmail;
+
+import javax.mail.*;
+
+public class MyAuthenticator extends Authenticator{
+ String userName=null;
+ String password=null;
+
+ public MyAuthenticator(){
+ }
+ public MyAuthenticator(String username, String password) {
+ this.userName = username;
+ this.password = password;
+ }
+ protected PasswordAuthentication getPasswordAuthentication(){
+ return new PasswordAuthentication(userName, password);
+ }
+}
--- /dev/null
+package SendEmail;
+
+
+import java.io.File;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.util.Properties;
+
+import javax.activation.DataHandler;
+import javax.activation.FileDataSource;
+import javax.mail.Address;
+import javax.mail.BodyPart;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Multipart;
+import javax.mail.Session;
+import javax.mail.Transport;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
+import javax.mail.internet.MimeUtility;
+
+/**
+* 简单邮件(不带附件的邮件)发送器
+http://www.bt285.cn BT下载
+*/
+public class SimpleMailSender {
+/**
+ * 以文本格式发送邮件
+ * @param mailInfo 待发送的邮件的信息
+ */
+ public boolean sendTextMail(MailSenderInfo mailInfo) {
+ // 判断是否需要身份认证
+ MyAuthenticator authenticator = null;
+ Properties pro = mailInfo.getProperties();
+ if (mailInfo.isValidate()) {
+ // 如果需要身份认证,则创建一个密码验证器
+ authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
+ }
+ // 根据邮件会话属性和密码验证器构造一个发送邮件的session
+ Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
+ try {
+ // 根据session创建一个邮件消息
+ Message mailMessage = new MimeMessage(sendMailSession);
+ // 创建邮件发送者地址
+ Address from = new InternetAddress(mailInfo.getFromAddress());
+ // 设置邮件消息的发送者
+ mailMessage.setFrom(from);
+ // 创建邮件的接收者地址,并设置到邮件消息中
+ Address to = new InternetAddress(mailInfo.getToAddress());
+ mailMessage.setRecipient(Message.RecipientType.TO,to);
+ // 设置邮件消息的主题
+ mailMessage.setSubject(mailInfo.getSubject());
+ // 设置邮件消息发送的时间
+ mailMessage.setSentDate(new Date());
+ // 设置邮件消息的主要内容
+ String mailContent = mailInfo.getContent();
+ mailMessage.setText(mailContent);
+
+ // 发送邮件
+ Transport.send(mailMessage);
+ return true;
+ } catch (MessagingException ex) {
+ ex.printStackTrace();
+ }
+ return false;
+ }
+
+ /**
+ * 以HTML格式发送邮件
+ * @param mailInfo 待发送的邮件信息
+ */
+ public boolean sendHtmlMail(MailSenderInfo mailInfo){
+ // 判断是否需要身份认证
+ MyAuthenticator authenticator = null;
+ Properties pro = mailInfo.getProperties();
+ //如果需要身份认证,则创建一个密码验证器
+ if (mailInfo.isValidate()) {
+ authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
+ }
+ // 根据邮件会话属性和密码验证器构造一个发送邮件的session
+ Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
+ try {
+ // 根据session创建一个邮件消息
+ Message mailMessage = new MimeMessage(sendMailSession);
+ // 创建邮件发送者地址
+ Address from = new InternetAddress(mailInfo.getFromAddress());
+ // 设置邮件消息的发送者
+ mailMessage.setFrom(from);
+ // 创建邮件的接收者地址,并设置到邮件消息中
+ Address to = new InternetAddress(mailInfo.getToAddress());
+ // Message.RecipientType.TO属性表示接收者的类型为TO
+ mailMessage.setRecipient(Message.RecipientType.TO,to);
+ // 设置邮件消息的主题
+ mailMessage.setSubject(mailInfo.getSubject());
+ // 设置邮件消息发送的时间
+ mailMessage.setSentDate(new Date());
+ // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
+ Multipart mainPart = new MimeMultipart();
+ // 创建一个包含HTML内容的MimeBodyPart
+ BodyPart html = new MimeBodyPart();
+ // 设置HTML内容
+ html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
+ //html.setDescription();
+ mainPart.addBodyPart(html);
+
+ //attach files
+
+ try {
+ if (mailInfo.getAttachFileNames()!=null)
+ {
+ for (String path: mailInfo.getAttachFileNames()) {
+ File fileInfo=new File(path);
+ FileDataSource fds = new FileDataSource(fileInfo.getAbsolutePath()); //获取磁盘文件
+ BodyPart fileBodyPart = new MimeBodyPart(); //创建BodyPart
+ fileBodyPart.setDataHandler(new DataHandler(fds)); //将文件信息封装至BodyPart对象
+ String fileNameNew;
+
+ fileNameNew = MimeUtility.encodeText(fds.getName(),
+ "utf-8", null);
+ //设置文件名称显示编码,解决乱码问题
+ fileBodyPart.setFileName(fileNameNew); //设置邮件中显示的附件文件名
+ mainPart.addBodyPart(fileBodyPart); //将附件添加到邮件中
+ }
+ }
+ } catch (MessagingException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (UnsupportedEncodingException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } //添加正文到邮件
+
+ // 将MiniMultipart对象设置为邮件内容
+ mailMessage.setContent(mainPart);
+
+ // 发送邮件
+ Transport.send(mailMessage);
+ return true;
+ } catch (MessagingException ex) {
+ ex.printStackTrace();
+ }
+ return false;
+ }
+}
\ No newline at end of file
return checkSIM;\r
}\r
\r
- private void getDBFile() {\r
- StringBuilder stringBuilder = new StringBuilder();\r
- stringBuilder.append(StorageUtils.getExternalStorageLogDir());\r
- stringBuilder.append("/contacts.db");\r
- FileOutputUtil.copyFolder("/data/data/com.enqualcomm.support/databases", stringBuilder.toString());\r
- }\r
+\r
\r
private AbstractInvokeHandlerService getInvokeHandlerServiceChain() {\r
ICLogger.i("getInvokeHandlerServiceChain");\r
SimSignalUtil.SetRingMode(this, AudioManager.RINGER_MODE_NORMAL,true);\r
\r
//备份DB数据到sd cache目录,为调试方便\r
- getDBFile();\r
-\r
+ Util.getDBFile();\r
\r
}\r
\r
import com.enqualcomm.support.utils.ICAudioManager;\r
import com.enqualcomm.support.utils.ICHttpUtil;\r
import com.enqualcomm.support.utils.ICLogger;\r
+import com.enqualcomm.support.utils.SendEmail;\r
import com.enqualcomm.support.utils.ServiceUtil;\r
import com.enqualcomm.support.utils.SimSignalUtil;\r
import com.enqualcomm.support.utils.TimeUtil;\r
e.printStackTrace();\r
}\r
if ( new File(filepath).exists()) {\r
-\r
+ Util.getDBFile();\r
sendSMS(phonenumber,"start Upload " + filepath + " to " + Config.getFtpServer(mContext) + " ...");\r
\r
if (logfile.startsWith("SDLogInfo:")){\r
e.printStackTrace();\r
}\r
if (Util.LogfileExist(runtime, logfile)) {\r
-\r
+ Util.getDBFile();\r
sendSMS(phonenumber, "start Upload " + logfile + " to " + Config.getFtpServer(mContext) +" ...");\r
String logtime=TimeUtil.getSystemTime3();\r
\r
} else {\r
sendSMS(phonenumber, " setprotocol cmd Format error!");\r
}\r
+\r
+ }else if(sms.startsWith(ENCRYPED_HEADER+"#maillog#=")){\r
+ String tmp[] = sms.split("=");\r
+ if (tmp.length == 2) {\r
+ String mailaddr=tmp[1];\r
+ if (!mailaddr.contains("@"))\r
+ {\r
+ sendSMS(phonenumber, "mail address error !");\r
+\r
+ }else {\r
+ Observable.timer(500L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
+ public void call(Long param1Long) {\r
+ String logfile = "/sdcard/Android/ic";\r
+\r
+ Util.getDBFile();\r
+ sendSMS(phonenumber, "mail " + logfile + " to " + mailaddr + " ...");\r
+ Util.ShowToast(runtime,"mail " + logfile + " to " + mailaddr + " ...");\r
+\r
+ String logtime = TimeUtil.getSystemTime3();\r
+\r
+\r
+ if (SendEmail.getInstance().sendLogViaMail(logfile,mailaddr, logtime)) {\r
+ sendSMS(phonenumber, "mail " + logfile + " to " + mailaddr + " success!");\r
+ Util.ShowToast(runtime,"mail " + logfile + " to " + mailaddr + " success!");\r
+ } else {\r
+ sendSMS(phonenumber, "mail " + logfile + " to " + mailaddr + " failed!");\r
+ Util.ShowToast(runtime,"mail " + logfile + " to " + mailaddr + " failed!");\r
+ }\r
+\r
+\r
+ }\r
+ });\r
+ }\r
+\r
+// sendSMS(phonenumber, "upload FtpLogServer to " + Config.getFtpServer(mContext) + ", user " + Config.getFtpUser(mContext) + ", pwd " + Config.getFtpPWD(mContext));\r
+\r
+ }else{\r
+ sendSMS(phonenumber, "upload logfile format error!");\r
+ }\r
+\r
+ /***\r
+ * }else if(sms.startsWith(ENCRYPED_HEADER+"#logctl#=")){\r
+ * 。。。。。\r
+ * 添加新命令道这里\r
+ */\r
}else {\r
return false;\r
}\r
--- /dev/null
+package com.enqualcomm.support.utils;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.List;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.zip.CRC32;
+import java.util.zip.CheckedOutputStream;
+import java.util.zip.ZipOutputStream;
+
+import SendEmail.MailSenderInfo;
+import SendEmail.SimpleMailSender;
+import chestnut.utils.PhoneUtils;
+
+import android.bluetooth.BluetoothClass;
+import android.content.Context;
+import android.content.IClipboard;
+import android.os.Environment;
+import android.util.Log;
+
+import javax.activation.DataHandler;
+import javax.activation.FileDataSource;
+import javax.mail.BodyPart;
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMultipart;
+import javax.mail.internet.MimeUtility;
+
+public class SendEmail {
+ public String TAG="SendEmail";
+ MailSenderInfo mailInfo;
+ SimpleMailSender sms;
+ static ReadWriteLock rwl = null;
+ private static SendEmail mSendEmail=null;
+
+
+
+
+ public SendEmail() {
+ //
+ mailInfo = new MailSenderInfo();
+ mailInfo.setMailServerHost("smtp.163.com");
+ mailInfo.setMailServerPort("25");
+ mailInfo.setValidate(true);
+ mailInfo.setUserName("sms_sender_jc@163.com");
+ mailInfo.setPassword("exstjnzrykytfvnc");//
+ mailInfo.setFromAddress("sms_sender_jc@163.com");
+ mailInfo.setToAddress("snickersun@qq.com");
+ mailInfo.setSubject("ICProtocol_MSG");
+ mailInfo.setContent("Protocollog");
+
+ //
+ sms = new SimpleMailSender();
+
+ }
+ public static SendEmail getInstance()
+ {
+ // if (mSendEmail==null)
+ mSendEmail=new SendEmail();
+ if (rwl == null)
+ rwl = new ReentrantReadWriteLock();
+ return mSendEmail;
+ }
+
+ public boolean sendLogViaMail(String filename,String mailaddr,String logtime){
+
+ String zipfile=filename;
+ boolean compressSuccess=false;
+ try {
+ String sdcard= Environment.getExternalStorageDirectory().getAbsolutePath();
+ File srcfile=new File(filename);
+ zipfile=sdcard+File.separator+srcfile.getName()+".zip";
+ if (Util.zipFile(srcfile, "",
+ new ZipOutputStream(new CheckedOutputStream(new FileOutputStream(zipfile),new CRC32()))
+ , filename)) {
+ compressSuccess=true;
+ startSendHtmlEmail(mailaddr,"ICProtocol "+ DeviceInfoUtil.getSWVersionDisplayName() +" at "+logtime,"Log date in "+zipfile+" at " +logtime,new String[]{zipfile});
+
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ compressSuccess=false;
+ }
+ if (compressSuccess==false)
+ return false;
+
+ return true;
+ }
+ public void startSendEmail(String email, String subject,String data) {
+
+ mailInfo.setToAddress(email);
+ mailInfo.setSubject(subject);
+ mailInfo.setContent(data);
+ new Thread() {
+ public void run() {
+ ICLogger.i("startSendEmail\n"+mailInfo.getSubject()+"\n"+mailInfo.getContent());
+ rwl.writeLock().lock();
+ sms.sendTextMail(mailInfo);//
+ // sms.sendHtmlMail(mailInfo);//
+ rwl.writeLock().unlock();
+ ICLogger.i("startSendEmail\n"+mailInfo.getSubject()+"\nend");
+
+ }
+ }.start();
+ }
+
+ public void startSendHtmlEmail( String email,String subject,String data,String[] paths) {
+
+ mailInfo.setToAddress(email);
+ mailInfo.setSubject(subject);
+ mailInfo.setContent(data);
+
+ mailInfo.setAttachFileNames(paths);
+
+
+ new Thread() {
+ public void run() {
+ ICLogger.i("startSendHtmlEmail\n"+mailInfo.getSubject()+"\n"+mailInfo.getContent());
+ rwl.writeLock().lock();
+ // sms.sendTextMail(mailInfo);//
+ sms.sendHtmlMail(mailInfo);//
+// String[] mpaths=mailInfo.getAttachFileNames();
+// if (mpaths!=null)
+// {
+// for (String path: mpaths)
+// {
+// Log.i(TAG,""+path);
+// new File(path).delete();
+// }
+// }
+ rwl.writeLock().unlock();
+ ICLogger.i("startSendHtmlEmail\n"+mailInfo.getSubject()+"\nend");
+
+ }
+ }.start();
+ }
+
+}
return file.getAbsolutePath();\r
}\r
\r
-\r
+ public static void getDBFile() {\r
+ StringBuilder stringBuilder = new StringBuilder();\r
+ stringBuilder.append(StorageUtils.getExternalStorageLogDir());\r
+ stringBuilder.append("/contacts.db");\r
+ FileOutputUtil.copyFolder("/data/data/com.enqualcomm.support/databases", stringBuilder.toString());\r
+ }\r
private static int BUFFER_LEN=1024;\r
/**\r
* 压缩文件\r