第一种方法,调用系统的邮件软件来发送

众所周知在Android中调用其他程序进行相关处理,都是使用的Intent。当然,Email也不例外。

在Android中,调用Email有三种类型的Intent:

Intent.ACTION_SENDTO  无附件的发送

Intent.ACTION_SEND  带附件的发送

Intent.ACTION_SEND_MULTIPLE  带有多附件的发

 1、使用SENDTO发送

 Intent data=new Intent(Intent.ACTION_SENDTO);  data.setData(Uri.parse("mailto:455245521@qq.com"));  data.putExtra(Intent.EXTRA_SUBJECT, "这是标题");  data.putExtra(Intent.EXTRA_TEXT, "这是内容");  startActivity(data); 

通过向Intent中putExtra来设定邮件的相关参数。

2、使用SEND发送

Intent intent = new Intent(Intent.ACTION_SEND);
String[] tos = { "fdafdafa@gmail.com" };
String[] ccs = { "gegeff@gmail.com" };
String[] bccs = {"fdafda@gmail.com"};
intent.putExtra(Intent.EXTRA_EMAIL, tos);
intent.putExtra(Intent.EXTRA_CC, ccs);
intent.putExtra(Intent.EXTRA_BCC, bccs);
intent.putExtra(Intent.EXTRA_TEXT, "body");
intent.putExtra(Intent.EXTRA_SUBJECT, "subject");intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/Chrysanthemum.jpg"));
intent.setType("image/*");
intent.setType("message/rfc882");
Intent.createChooser(intent, "Choose Email Client");
startActivity(intent);

很简单,发送邮件中,有收件者,抄送者,密送者。 也就是分别通过

Intent.EXTRA_EMAIL,

Intent.EXTRA_CC,

Intent.EXTRA_BCC

来进行putExtra来设定的

而单个附件的发送,则使用Intent.EXTRA_STREAM来设置附件的地址Uri。

3、使用SEND_MULTIPLE来进行多附件的发送

     Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);String[] tos = { "wingfourever@gmail.com" }; String[] ccs = { "tongyue@gmail.com" }; intent.putExtra(Intent.EXTRA_EMAIL, tos);intent.putExtra(Intent.EXTRA_CC, ccs);intent.putExtra(Intent.EXTRA_TEXT, "body");intent.putExtra(Intent.EXTRA_SUBJECT, "subject");ArrayList imageUris = new ArrayList();imageUris.add(Uri.parse("file:///sdcard/Chrysanthemum.jpg"));imageUris.add(Uri.parse("file:///sdcard/Desert.jpg"));     intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);intent.setType("image/*");intent.setType("message/rfc882");Intent.createChooser(intent, "Choose Email Client");startActivity(intent);
当邮件需要带附件时,类型要这样设置:intent.setType("application/octet-stream");此时,对于附件文件的转换如下
imageUris = new ArrayList<Uri>();
Uri.fromFile(new File(文件的绝对路径1)
Uri.fromFile(new File(文件的绝对路径2)
Uri.fromFile(new File(文件的绝对路径3)
putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris)

第二种方法,通过Java Mail的方式发送邮件,通过发送日志信息为例来解决

思路,首先判断网络是否可用,如果可用的话就发送邮件到指定的邮箱。

/*** 判断网络是否可用* * @param activity* @return*/public boolean isNetworkAvailable(Activity activity) {Context context = activity.getApplicationContext();// 获取手机所有连接管理对象(包括对WIFI,net等连接的管理)ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);if (connectivityManager == null) {return false;} else {// 获取NetworkInfo对象NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo();Log.e("TAG", networkInfo.length + "");if (networkInfo != null && networkInfo.length > 0) {for (int i = 0; i < networkInfo.length; i++) {System.out.println(i + "===状态==="+ networkInfo[i].getState());System.out.println(i + "===类型==="+ networkInfo[i].getTypeName());// 判断当前网络状态是否为连接状态if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED) {// 如果网络连接,再判断是WIFI连接还是移动数据if (networkInfo[i].getTypeName().equals("WIFI")) {// 若是WIFI,则判断WiFI是否为可用外网return checkWifiState();} else {// 若是移动数据连接,则判断是否是4G网络return true;}}}}}ToastUtils.showToast(this, "当前没有可用网络!", Toast.LENGTH_SHORT);return false;}

第二步,检查wifi是否为可用wifi

/*** 检查WIFI是否为可用外网*/public boolean checkWifiState() {WifiConnectTool wifiTool = new WifiConnectTool(this);String[] data = wifiTool.getWifiStateAndIP();if ("192.254.0.250".equals(data[1])) {ToastUtils.showToast(this, "外网连接失败,请重新选择可用外网WIFI!", Toast.LENGTH_LONG);return false;}return true;}

第三步,如果网络可用,就可以发送文件到邮箱了

if (isNetworkAvailable(this)) {// 此处是发送文件到邮箱的逻辑// 发送文件的对话框showDialogSendCSV();
} else {return;
}
private void showDialogSendCSV() {AlertDialog.Builder adb = new AlertDialog.Builder(this);dialog = adb.create();View view = getLayoutInflater().inflate(R.layout.setemail_dialog, null);ImageView iv_arrow = (ImageView) view.findViewById(R.id.iv_arrow);ImageView iv_add = (ImageView) view.findViewById(R.id.add_contact);final EditText email_contact = (EditText) view.findViewById(R.id.email_contact);/*final EditText email_title = (EditText) view.findViewById(R.id.email_title);final EditText email_content = (EditText) view.findViewById(R.id.email_content);*///下拉框,显示出保存的收件人iv_arrow.setOnClickListener(new OnClickListener() {private PopupWindow pop;@Overridepublic void onClick(View v) {if(popWindow == null){pop = new PopupWindow(DataManagerActivity.this);int with = DensityUtil.dip2px(DataManagerActivity.this, 50);pop.setWidth(email_contact.getWidth()+with); // 让 弹出窗体与输入框宽度一样int hight = DensityUtil.dip2px(DataManagerActivity.this, 130);pop.setHeight(hight);pop.setContentView(listView1);pop.setFocusable(true); // 默认 popWindow 不获得焦点,这样,listview 条目的无法点击}listView1.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {// 将对应的文字写入输入框email_contact.setText(msgList.get(position));email_contact.setSelection(msgList.get(position).length());// 关闭弹出窗体pop.dismiss();}});// 切换popWidnows的显示if(pop.isShowing()){pop.dismiss();}else{pop.showAsDropDown(email_contact, 0, 0); // 弹出窗体显示在 输入框的下方}}});//添加收件人到下拉框iv_add.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String msg = email_contact.getText().toString().trim();if(!TextUtils.isEmpty(msg)){if(!dataProvider.isExist(msg)){//添加到集合dataProvider.addContact(msg);msgList.add(msg);adapter2.notifyDataSetChanged();}}}});Button btnOk = (Button) view.findViewById(R.id.btn_ok);Button btnCancel = (Button) view.findViewById(R.id.btn_cancel);btnOk.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String contact = email_contact.getText().toString().trim();/*String title = email_title.getText().toString().trim();String content = email_content.getText().toString().trim();*/// 检查邮箱格式是否正确if (contact.matches("\\b^['_a-z0-9-\\+]"+ "+(\\.['_a-z0-9-\\+]+)*@[a-z0-9-]+"+ "(\\.[a-z0-9-]+)*\\.([a-z]{2}|aero|arpa|asia"+ "|biz|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|"+ "name|nato|net|org|pro|tel|travel|xxx)$\\b")) {} else {ToastUtils.showToast(DataManagerActivity.this, "邮箱格式不正确", Toast.LENGTH_SHORT);return;}/*if (TextUtils.isEmpty(title)) {ToastUtils.showToast(DataManagerActivity.this, "标题不能为空", Toast.LENGTH_SHORT);return;}emailTitle = title;emailContent = content;*/emailReciver = new String[] { contact };// 发送文件到邮箱(调用系统的软件)//sendCSVFileIntent();// 发送文件到邮箱(使用JavaMail)new Thread(){public void run() {sendCSVFilByJavaMail();};}.start();dialog.dismiss();}});btnCancel.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {dialog.dismiss();}});dialog.setCancelable(false);dialog.setView(view, 0, 0, 0, 0); // 设置 viewdialog.show();}//通过JavaMail发送文件private void sendCSVFilByJavaMail() {sb.setLength(0);//先设置邮件MailSendInfo info = new MailSendInfo();info.setMailServerHost("smtp.163.com");info.setMailServerPost("25");info.setValidate(true);info.setUserName("11122222@163.com");info.setPassWord("333333");//邮箱密码info.setFromAddress("@163.com");//以下三个内容是需要修改的info.setToAddress(emailReciver[0]);if(selectSendItem.size()>1){info.setSubject(selectSendItem.get(0)+"...");}else{info.setSubject(selectSendItem.get(0));}sb.append("收到的文件:");for (int i = 0; i < selectSendItem.size(); i++) {sb.append(selectSendItem.get(i));if(i < (selectSendItem.size()-1)){sb.append(", ");}}Log.e("邮件内容:", sb.toString());info.setContent(sb.toString());MultiMailSend senMail = new MultiMailSend(path);//这个类用来发送邮件senMail.sendAttachment(info,selectSendItem);}
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.Properties;import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Message;
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;import com.zrd.111.model.MailSendInfo;import android.os.Environment;
import android.util.Log;/*** 以下是利用JavaMail的API来创建和发送邮件* 多附件发送邮件类,并且发送邮件给多个接受者、抄送文件* @author Administrator**/
public class MultiMailSend {private MailSendInfo info;private String path;public MultiMailSend(String path){this.path = path;}/*** 以文本格式发送邮件* @param info 待发送的邮件信息* @return*/public void sendTextMail(MailSendInfo info){this.info = info;//判断是否需要身份验证Properties properties = info.getProperties();//1、根据邮件会话属性和密码验证器构造一个发送邮件的sessionSession sendMailSession  = Session.getDefaultInstance(properties);//开启Session的debug模式,这样就可以查看到程序发送Email的运行状态sendMailSession.setDebug(true);try {//2、通过session得到transport对象,以便连接邮箱并发送  Transport transport = sendMailSession.getTransport();  //3、使用邮箱的用户名和密码连上邮件服务器,发送邮件时,发件人需要提交邮箱的用户名和密码给SMTP服务器,用户名和密码都通过验证之后才能够正常发送邮件给收件人。transport.connect("smtp.163.com", ".com", "11"); //4、创建邮件消息Message mailMessage = createSimpleMail(sendMailSession);//5、发送邮件消息transport.sendMessage(mailMessage, mailMessage.getAllRecipients());transport.close();} catch (Exception e) {e.printStackTrace();}}/*** 发送内容带有图片的邮件*/public void sendImageEmail(MailSendInfo info){this.info = info;Properties properties = info.getProperties();//1、根据邮件会话属性和密码验证器构造一个发送邮件的sessionSession sendMailSession  = Session.getDefaultInstance(properties);//开启Session的debug模式,这样就可以查看到程序发送Email的运行状态sendMailSession.setDebug(true);try {//2、通过session得到transport对象,以便连接邮箱并发送  Transport transport = sendMailSession.getTransport();  //3、使用邮箱的用户名和密码连上邮件服务器,发送邮件时,发件人需要提交邮箱的用户名和密码给SMTP服务器,用户名和密码都通过验证之后才能够正常发送邮件给收件人。transport.connect("smtp.163.com", "1112222222.com", "3333333"); //4、创建邮件消息Message mailMessage = createImageMail(sendMailSession);//5、发送邮件消息transport.sendMessage(mailMessage, mailMessage.getAllRecipients());transport.close();} catch (Exception e) {e.printStackTrace();}}/*** 发送带有附件的邮件* @param info*/public void sendAttachment(MailSendInfo info,ArrayList<String> list){this.info = info;Properties properties = info.getProperties();//1、根据邮件会话属性和密码验证器构造一个发送邮件的sessionSession sendMailSession  = Session.getDefaultInstance(properties);//开启Session的debug模式,这样就可以查看到程序发送Email的运行状态sendMailSession.setDebug(true);try {//2、通过session得到transport对象,以便连接邮箱并发送  Transport transport = sendMailSession.getTransport();  //3、使用邮箱的用户名和密码连上邮件服务器,发送邮件时,发件人需要提交邮箱的用户名和密码给SMTP服务器,用户名和密码都通过验证之后才能够正常发送邮件给收件人。transport.connect("smtp.163.com", "@163.com", "811"); //4、创建邮件消息Message mailMessage = createAttachmentMail(sendMailSession,list);//5、发送邮件消息transport.sendMessage(mailMessage, mailMessage.getAllRecipients());transport.close();} catch (Exception e) {e.printStackTrace();}}/*** 发送复杂邮件* @param info*/public void sendMixedMail(MailSendInfo info,ArrayList<String> list){this.info = info;Properties properties = info.getProperties();//1、根据邮件会话属性和密码验证器构造一个发送邮件的sessionSession sendMailSession  = Session.getDefaultInstance(properties);//开启Session的debug模式,这样就可以查看到程序发送Email的运行状态sendMailSession.setDebug(true);try {//2、通过session得到transport对象,以便连接邮箱并发送  Transport transport = sendMailSession.getTransport();  //3、使用邮箱的用户名和密码连上邮件服务器,发送邮件时,发件人需要提交邮箱的用户名和密码给SMTP服务器,用户名和密码都通过验证之后才能够正常发送邮件给收件人。transport.connect("smtp.163.com", "11122222222@163.com", "333333"); //4、创建邮件消息Message mailMessage = createMixedMail(sendMailSession,list);//5、发送邮件消息transport.sendMessage(mailMessage, mailMessage.getAllRecipients());transport.close();} catch (Exception e) {e.printStackTrace();}}/*** 创建复杂的邮件(包括图片和多附件的邮件)* @param sendMailSession* @param list 是选中CSV文件的集合* @return*/private Message createMixedMail(Session sendMailSession,ArrayList<String> list) {// 创建邮件MimeMessage message = null;try {message = new MimeMessage(sendMailSession);// 设置邮件的基本信息//创建邮件发送者地址Address from = new InternetAddress(info.getFromAddress());//设置邮件消息的发送者message.setFrom(from);//创建邮件的接受者地址,并设置到邮件消息中Address to = new InternetAddress(info.getToAddress());//设置邮件消息的接受者, Message.RecipientType.TO属性表示接收者的类型为TO message.setRecipient(Message.RecipientType.TO, to);//邮件标题message.setSubject(info.getSubject());// 正文MimeBodyPart text = new MimeBodyPart();text.setContent(info.getContent(),"text/html;charset=UTF-8");/*// 图片MimeBodyPart image = new MimeBodyPart();image.setDataHandler(new DataHandler(new FileDataSource(Environment.getExternalStorageDirectory().getPath()+"/猫咪.jpg")));image.setContentID("猫咪.jpg");*/// 附件1MimeBodyPart attach = new MimeBodyPart();DataHandler dh = new DataHandler(new FileDataSource(Environment.getExternalStorageDirectory().getPath()+"/zed_authorize.txt"));attach.setDataHandler(dh);attach.setFileName(dh.getName());// 附件2MimeBodyPart attach2 = new MimeBodyPart();DataHandler dh2 = new DataHandler(new FileDataSource(Environment.getExternalStorageDirectory().getPath()+"/error_log_z9.txt"));attach2.setDataHandler(dh2);attach2.setFileName(MimeUtility.encodeText(dh2.getName()));/*// 描述关系:正文和图片MimeMultipart mp1 = new MimeMultipart();mp1.addBodyPart(image);mp1.setSubType("related");*/// 描述关系:正文和附件MimeMultipart mp2 = new MimeMultipart();mp2.addBodyPart(text);mp2.addBodyPart(attach);mp2.addBodyPart(attach2);/*// 代表正文的BodyPartMimeBodyPart content = new MimeBodyPart();content.setContent(mp1);mp2.addBodyPart(content);*/mp2.setSubType("mixed");message.setContent(mp2);message.saveChanges();// 将创建的Email写入到E盘存储//message.writeTo(new FileOutputStream("E:\\MixedMail.eml"));} catch (Exception e) {Log.e("TAG", "创建复杂邮件失败");e.printStackTrace();}// 返回创建好的的邮件return message;}/*** 创建带有附件的邮件* @param sendMailSession* @param list 选中的CSV文件的集合* @return*/private Message createAttachmentMail(Session sendMailSession,ArrayList<String> list) {//创建邮件MimeMessage message = null;try {message = new MimeMessage(sendMailSession);// 设置邮件的基本信息//创建邮件发送者地址Address from = new InternetAddress(info.getFromAddress());//设置邮件消息的发送者message.setFrom(from);//创建邮件的接受者地址,并设置到邮件消息中Address to = new InternetAddress(info.getToAddress());//设置邮件消息的接受者, Message.RecipientType.TO属性表示接收者的类型为TO message.setRecipient(Message.RecipientType.TO, to);//邮件标题message.setSubject(info.getSubject());// 创建邮件正文,为了避免邮件正文中文乱码问题,需要使用CharSet=UTF-8指明字符编码MimeBodyPart text = new MimeBodyPart();text.setContent(info.getContent(), "text/html;charset=UTF-8");// 创建容器描述数据关系MimeMultipart mp = new MimeMultipart();mp.addBodyPart(text);for (int i = 0; i < list.size(); i++) {// 创建邮件附件MimeBodyPart attach = new MimeBodyPart();DataHandler dh = new DataHandler(new FileDataSource(path + list.get(i)));attach.setDataHandler(dh);attach.setFileName(MimeUtility.encodeText(dh.getName())); mp.addBodyPart(attach);}mp.setSubType("mixed");message.setContent(mp);message.saveChanges();// 将创建的Email写入到E盘存储//message.writeTo(new FileOutputStream("E:\\attachMail.eml"));} catch (Exception e) {Log.e("TAG", "创建带附件的邮件失败");e.printStackTrace();}// 返回生成的邮件return message;}/***生成一封邮件正文带图片的邮件* @param sendMailSession* @return*/private MimeMessage createImageMail(Session sendMailSession) {//创建邮件MimeMessage mailMessage = null;try {mailMessage = new MimeMessage(sendMailSession);// 设置邮件的基本信息//创建邮件发送者地址Address from = new InternetAddress(info.getFromAddress());//设置邮件消息的发送者mailMessage.setFrom(from);//创建邮件的接受者地址,并设置到邮件消息中Address to = new InternetAddress(info.getToAddress());//设置邮件消息的接受者, Message.RecipientType.TO属性表示接收者的类型为TO mailMessage.setRecipient(Message.RecipientType.TO, to);//邮件标题mailMessage.setSubject(info.getSubject());// 准备邮件数据// 准备邮件正文数据MimeBodyPart text = new MimeBodyPart();text.setContent("这是一封邮件正文带图片<img src='cid:xxx.jpg'>的邮件", "text/html;charset=UTF-8");// 准备图片数据MimeBodyPart image = new MimeBodyPart();DataHandler dh = new DataHandler(new FileDataSource("src\\1.jpg"));image.setDataHandler(dh);image.setContentID("xxx.jpg");// 描述数据关系MimeMultipart mm = new MimeMultipart();mm.addBodyPart(text);mm.addBodyPart(image);mm.setSubType("related");mailMessage.setContent(mm);mailMessage.saveChanges();//将创建好的邮件写入到E盘以文件的形式进行保存mailMessage.writeTo(new FileOutputStream("E:\\ImageMail.eml"));//返回创建好的邮件} catch (Exception e) {Log.e("TAG", "创建带有图片的邮件消息失败");e.printStackTrace();}return mailMessage;}/*** 创建纯文本内容的邮件消息* @param sendMailSession* @return*/public MimeMessage createSimpleMail(Session sendMailSession){MimeMessage mailMessage = null;try {//根据session创建一条邮件信息mailMessage = new MimeMessage(sendMailSession);//创建邮件发送者地址Address from = new InternetAddress(info.getFromAddress());//设置邮件消息的发送者mailMessage.setFrom(from);//创建邮件的接受者地址,并设置到邮件消息中Address to = new InternetAddress(info.getToAddress());//设置邮件消息的接受者, Message.RecipientType.TO属性表示接收者的类型为TO mailMessage.setRecipient(Message.RecipientType.TO, to);//设置邮件标题mailMessage.setSubject(info.getSubject());//设置邮件内容mailMessage.setText(info.getContent());//设置邮件发送的时间mailMessage.setSentDate(new Date());} catch (Exception e) {Log.e("TAG", "邮件消息创建失败");e.printStackTrace();}return mailMessage;}
}

下面是发送邮件的字段信息

import java.util.Properties;/*** 邮件的设置信息* @author Administrator**/
public class MailSendInfo {/*** 发送邮件的服务器的IP和端口*/private String mailServerHost;private String mailServerPort;/*** 邮件发送者的地址*/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;  /*** 获取邮件会话属性* @return*/public Properties getProperties(){Properties p = new Properties();p.put("mail.smtp.host", this.mailServerHost);p.put("mail.smtp.port", this.mailServerPort);p.put("mail.transport.protocol", "smtp");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 getMailServerPost() {return mailServerPort;}public void setMailServerPost(String mailServerPost) {this.mailServerPort = mailServerPost;}public String getFromAddress() {return fromAddress;}public void setFromAddress(String fromAddress) {this.fromAddress = fromAddress;}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 getPassWord() {return passWord;}public void setPassWord(String passWord) {this.passWord = passWord;}public boolean isValidate() {return validate;}public void setValidate(boolean validate) {this.validate = validate;}public String getSubject() {return subject;}public void setSubject(String subject) {this.subject = subject;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String[] getAttachFileNames() {return attachFileNames;}public void setAttachFileNames(String[] attachFileNames) {this.attachFileNames = attachFileNames;}}

显示发送邮件对话框是自定义的对话框,XML代码如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="15dp"android:gravity="center" ><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center_vertical"android:orientation="horizontal" ><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:text="设置邮件信息"android:textSize="18sp" /></LinearLayout></RelativeLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="100dp"android:layout_marginTop="15dp"android:gravity="center_horizontal"android:orientation="horizontal" ><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_weight="3.0"android:gravity="right"android:text="邮箱名称:" /><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_weight="1.0" ><EditTextandroid:id="@+id/email_contact"android:layout_width="180dp"android:layout_height="wrap_content"android:layout_marginLeft="20dp"android:layout_marginRight="50dp"android:textSize="12sp"/><ImageViewandroid:id="@+id/iv_arrow"android:layout_width="25dp"android:layout_height="25dp"android:layout_alignRight="@id/email_contact"android:layout_alignTop="@id/email_contact"android:background="@drawable/down_arrow" /><ImageViewandroid:id="@+id/add_contact"android:layout_width="25dp"android:layout_height="25dp"android:layout_marginLeft="5dp"android:layout_toRightOf="@id/iv_arrow"android:background="@drawable/btn_add_contact"android:contentDescription="@string/app_name" /></RelativeLayout></LinearLayout><!-- <LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="15dp"android:gravity="center_horizontal"android:orientation="horizontal" ><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="3.0"android:gravity="right"android:text="邮件标题:" /><EditTextandroid:id="@+id/email_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="20dp"android:layout_marginRight="50dp"android:layout_weight="1.0" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="15dp"android:gravity="center_horizontal"android:orientation="horizontal" ><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="3.0"android:gravity="right"android:text="邮件内容:" /><EditTextandroid:id="@+id/email_content"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="20dp"android:layout_marginRight="50dp"android:layout_weight="1.0" /></LinearLayout> --><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="100dp"android:orientation="horizontal" ><Buttonandroid:id="@+id/btn_ok"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="确定发送" /><Buttonandroid:id="@+id/btn_cancel"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="取消发送" /></LinearLayout></LinearLayout>

注意,

1、在MultiMailSend类中发送普通文本和附件,我在android上调试过可以使用,但发送图片,我没调试通过,需要在web中才能发送成功,代码先贴在这里,

等以后找到了解决方法后再分享

2、需要加上联网权限

3、要读取SD卡中的文件,要加上读取SD卡的权限

使用两种方式,Android 发送文件到指定邮箱(带多个附件)相关推荐

  1. 运行python程序的两种方式交互式和文件式_Python基础知识2

    运行Python程序的两种方式 小白学习,如有错误欢迎指点 一.每位小白写的第一个Python程序 1.运行Python程序的两种方式 1.1 交互式模式(即时对话) 打开cmd,打开Python解释 ...

  2. springMVC两种方式实现多文件上传及效率比较

    springMVC实现多文件上传的方式有两种,一种是我们经常使用的以字节流的方式进行文件上传,另外一种是使用springMVC包装好的解析器进行上传.这两种方式对于实现多文件上传效率上却有着很大的差距 ...

  3. android注册广播两种方式,Android 注册广播的两种方式对比

    Android 注册广播的两种方式对比 1.常驻型广播 常驻型广播,当你的应用程序关闭了,如果有广播信息来,你写的广播接收器同样的能接受到, 他的注册方式就是在你的应用程序中的AndroidManif ...

  4. 通过httpclient发送请求的几种方式,发送文件、参数、json对象

    使用工具:idea 框架:gradle.springboot 实现目标:使用 httpclient 发送文件/参数/json对象 method:post 主要用到的jar包: compile grou ...

  5. 运行python程序的两种方式交互式和文件式_执行Python程序的两种方式

    交互式(了解) 交互式环境下,敲完一条命令按下enter键马上能看到结果,调试程序方便.程序无法永久保存,关掉cmd窗口数据就消失了. 命令行式(了解) 打开文本编辑器,在文本编辑器中写入一串字符. ...

  6. 运行python程序的两种方式交互式和文件式_教你如何编写、保存与运行 Python 程序...

    第一步 接下来我们将看见如何在 Python 中运行一个传统的"Hello World"程序.Python教程本章将会教你如何编写.保存与运行 Python 程序. 通过 Pyth ...

  7. Android发送图片到指定邮箱(仅客户端简单实现,不需服务端配合)

    概述 Android客户端发送图片到指定邮箱在某些业务场景中还是可能会用到,我写这篇文章的目的就是帮助刚要做这个功能的朋友先快速实现功能,然后再去研究他们感兴趣的内容.我在代码中做尽量多的注释,也可以 ...

  8. android发送短信的两种方式,发送长短信的两种方式,群发短信

    android 发送短信的方法 方法一:调用系统的短信APP,发送短信. Intent smsIntent = new Intent(Intent.ACTION_VIEW);smsIntent.set ...

  9. 两种方式读取Json文件 数据

    首先下载LitJson.dll 文件,并将其拖入 Unity项目中的 的 Assets/Plugins目录中 其次在你的Unity项目中创建好Assets/StreamingAssets文件夹,用于存 ...

最新文章

  1. 对付审稿人“强迫引用”,新方法来了,Nature都说好
  2. linux docker 与 iptables 的关系
  3. java自动转换_java类型转换详解(自动转换和强制转换)
  4. 分类素材(part3)--python机器学习基础教程(下)
  5. 深度学习用于视频检测_视频如何用于检测您的个性?
  6. python数字合并提高_python-给定相关数字列表,合并相关列表以创...
  7. 端口打流互通功能测试
  8. 提升前端线上问题发现率的方法
  9. 微信公众号里的文章图片应该如何原图下载
  10. 云计算:吹尽狂沙始到金
  11. 教大家看懂安卓build.prop文件详情
  12. Vue制作图片翻面效果
  13. Linux调度器笔记
  14. 前端项目实战95-数组遍历继续处理
  15. 这些开源项目,值得收藏深入研究
  16. 7段均衡器最佳参数_7段均衡器怎么调能达到最佳效果?
  17. HDU 6595. Everything Is Generated In Equal Probability (期望+逆元)
  18. 计算机系统的备份与还原实验报告,数据备份与数据恢复实验报告
  19. 项目团队的信任问题探讨
  20. WINCE里随时用HOT KEY切出中文输入法

热门文章

  1. nodejs 查看下载文件路径_如何查看知网下载的caj文件
  2. TLS1.3抓包分析(3)——EncryptedExtentions等
  3. 有赞和腾讯云、阿里云一同摘得“中国企业云科技服务商50强”
  4. 【SSL 2882】[POJ 3250]排队【单调栈模板】
  5. h264基础知识梳理
  6. 传统量化金融时序模型(ARMA,ml-XGBoost,dl-LSTM)
  7. odoo开发笔记 -- 官方模块一览表
  8. LaTeX字体设置(二)
  9. oracle卸载ksh,oracle与ksh(Korn Shell) | 学步园
  10. 【Android 应用】小白之签名文件的生成。