随笔 - 23  文章 - 0 评论 - 14 trackbacks - 0

废话少说,直接入主题!

结构如图:

Mail.java代码:

public class Mail extends javax.mail.Authenticator {
	private String _user;
	private String _pass;
	private String[] _to;
	private String _from;
	public String[] get_to() {
		return _to;
	}
	public void set_to(String[] _to) {
		this._to = _to;
	}
	public String get_from() {
		return _from;
	}
	public void set_from(String _from) {
		this._from = _from;
	}
	public String get_subject() {
		return _subject;
	}
	public void set_subject(String _subject) {
		this._subject = _subject;
	}
	private String _port;
	private String _sport;
	private String _host;
	private String _subject;
	private String _body;
	private boolean _auth;
	private boolean _debuggable;
	private Multipart _multipart;

	public Mail() {
		_host = "smtp.gmail.com";
		// default smtp server
		_port = "465";
		// default smtp port
		_sport = "465";
		// default socketfactory port
		_user = "";
		// username
		_pass = "";
		// password
		_from = "";
		// email sent from
		_subject = "";
		// email subject
		_body = "";
		// email body
		_debuggable = false;
		// debug mode on or off - default off
		_auth = true;
		// smtp authentication - default on
		_multipart = new MimeMultipart();
		// There is something wrong with MailCap, javamail can not find a
		// handler for the multipart/mixed part, so this bit needs to be added.
		MailcapCommandMap mc = (MailcapCommandMap) CommandMap
				.getDefaultCommandMap();
		mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
		mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
		mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
		mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
		mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
		CommandMap.setDefaultCommandMap(mc);
	}

	public Mail(String user, String pass) {
		this();
		_user = user;
		_pass = pass;
	}

	public boolean send() throws Exception {
		Properties props = _setProperties();
		
		if (!_user.equals("") && !_pass.equals("") && _to.length > 0
				&& !_from.equals("") && !_subject.equals("")
				&& !_body.equals("")) {
			Session session = Session.getInstance(props, this);
			MimeMessage msg = new MimeMessage(session);
			msg.setFrom(new InternetAddress(_from));
			InternetAddress[] addressTo = new InternetAddress[_to.length];
			for (int i = 0; i < _to.length; i++) {
				addressTo[i] = new InternetAddress(_to[i]);
			}
			msg.setRecipients(MimeMessage.RecipientType.TO, addressTo);
			msg.setSubject(MimeUtility.encodeText(_subject, "GB2312", "B"));
			msg.setSentDate(new Date());
			// setup message body
			BodyPart messageBodyPart = new MimeBodyPart();
			messageBodyPart.setContent(_body, "text/html;charset=gb2312");
			messageBodyPart.setText(_body);
			_multipart.addBodyPart(messageBodyPart);
			// Put parts in message
			msg.setContent(_multipart);
			// send email
			Transport.send(msg);
			return true;
		} else {
			return false;
		}
	}
	public void addAttachment(String filename) throws Exception {
		BodyPart messageBodyPart = new MimeBodyPart();
		DataSource source = new FileDataSource(filename);
		messageBodyPart.setDataHandler(new DataHandler(source));
		messageBodyPart.setFileName(MimeUtility.encodeText(_subject, "GB2312", "B")); 
		_multipart.addBodyPart(messageBodyPart);
	}

	public PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication(_user, _pass);
	}

	private Properties _setProperties() {
		Properties props = new Properties();
		props.put("mail.smtp.host", _host);
		if (_debuggable) {
			props.put("mail.debug", "true");
		}
		if (_auth) {
			props.put("mail.smtp.auth", "true");
		}
		props.put("mail.smtp.port", _port);
		props.put("mail.smtp.socketFactory.port", _sport);
		props.put("mail.smtp.socketFactory.class",
				"javax.net.ssl.SSLSocketFactory");
		props.put("mail.smtp.socketFactory.fallback", "false");
		return props;
	}

	// the getters and setters
	public String getBody() {
		return _body;
	}

	public void setBody(String _body) {
		this._body = _body;
	}
}

Send_Gmail_EmailActivity.java代码:

public class Send_Gmail_EmailActivity extends Activity {
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Button addImage = (Button) findViewById(R.id.send_email);
		addImage.setOnClickListener(new View.OnClickListener() {
			public void onClick(View view) {
				Mail m = new Mail("jwc520lxl@gmail.com", "ilyjwc520");
				String[] toArr = {"jwc_520_lxl@qq.com"};
				m.set_to(toArr);
				m.set_from("jason_jo");
				m.set_subject("邮件测试");
				m.setBody("是否支持中文");
				try {
					m.addAttachment("/sdcard/999.jpg");
					if (m.send()) {
						Toast.makeText(Send_Gmail_EmailActivity.this,
								"Email was sent successfully.",
								Toast.LENGTH_LONG).show();
					} else {
						Toast.makeText(Send_Gmail_EmailActivity.this,
								"Email was not sent.", Toast.LENGTH_LONG)
								.show();
					}
				} catch (Exception e) {
					// Toast.makeText(MailApp.this,
					// "There was a problem sending the email.",
					// Toast.LENGTH_LONG).show();
					Log.e("MailApp", "Could not send email", e);
				}
			}
		});
	}

}

main.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<TextView android:layout_width="fill_parent"
		android:layout_height="wrap_content" android:text="@string/hello" />
	<Button android:text="Button" android:id="@+id/send_email"
		android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</LinearLayout>

androidmanifest.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="Send_Gmail_Email.Jason"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="4" />
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".Send_Gmail_EmailActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>
posted on 2011-09-22 17:04 Jwc 阅读(...) 评论(...) 编辑 收藏