بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
مشکل در ارسال ایمیل با API جیمیل (SMTP)
سلام دوستان من سعی دارم که از SMTP جیمیل برای ارسال ایمیل استفاده کنم < اما متاسفانه جوابی داده نمیشه !
AutomaticEmailActivity
package com.freestyler.gmaillast.criss;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class AutomaticEmailActivity extends Activity {
private Mail m;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
m = new Mail("GMAIL@gmail.com", "PASS");
}
public void sendEmail(View view) {
String[] toArr = { "GMAIL@gmail.com", "EMAIL@yahoo.com", "GMAIL@gmail.com" }; // This is an array, you can add more emails, just separate them with a coma
m.setTo(toArr); // load array to setTo function
m.setFrom("GMAIL@gmail.com"); // who is sending the email
m.setSubject("subject");
m.setBody("your message goes here");
try {
m.addAttachment("/sdcard/myPicture.jpg"); // path to file you want to attach
if (m.send()) {
// success
Toast.makeText(AutomaticEmailActivity.this, "Email was sent successfully.", Toast.LENGTH_LONG).show();
} else {
// failure
Toast.makeText(AutomaticEmailActivity.this, "Email was not sent.", Toast.LENGTH_LONG).show();
}
}
catch (Exception e) {
// some other problem
Toast.makeText(AutomaticEmailActivity.this, "There was a problem sending the email.", Toast.LENGTH_LONG).show();
}
}
}
package com.freestyler.gmaillast.criss;
import java.util.Date;
import java.util.Properties;
import javax.activation.CommandMap;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.activation.MailcapCommandMap;
import javax.mail.BodyPart;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
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;
public class Mail extends javax.mail.Authenticator {
private String _user;
private String _pass;
private String[] _to;
private String _from;
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(_subject);
msg.setSentDate(new Date());
//setup message body
BodyPart messageBodyPart = new MimeBodyPart();
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(filename);
_multipart.addBodyPart(messageBodyPart);
}
@Override
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;
}
public void setTo(String[] toArr) {
this._to = toArr;
}
public void setFrom(String string) {
this._from = string;
}
public void setSubject(String string) {
this._subject = string;
}
//more of the getters and setters …..
}
Main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<Button android:id="@+id/send_email"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Send Email"
android:onClick="sendEmail"/>
</LinearLayout>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.freestyler.gmaillast.criss"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.INTERNET"/>
<uses-sdk android:minSdkVersion="8" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".AutomaticEmailActivity"
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>
خیلی از سورس های رو تست کردم همشون ارور میده ! (این هم منبع این سورس ها)
اینقدر پروژه و سورس تست کردم خسته شدم < فقط این منبع رو سورس رو میزارم که ببینید <
0
0
دو تا لینک پیدا کردم که کمک میکنه < لینک لینک (11 سال پیش)
0
0
آپ < لابری های لازم رو هم میتونید از لینکی که بالا گذاشتم دانلود کنید و توی پروژه استفاده کنید (11 سال پیش)
+1
0
من خودم تاحالا اینکارو نکردم ولی سورس هایی که گذاشتید به نظر معتبر میاد و vote بالایی هم دارن ، بهتره ارور مربوطه رو بذارید تا بررسی کنیم (11 سال پیش)
0
0
متاسفانه برنامه هیچ اررو یا کرشی نمیکنه < فقط ایمیل ارسال نمیشه ! (11 سال پیش)
+1
0
من خودم برای ارسال ایمیل یا Intent صدا میزنم ، یا میفرستم به سرور تا سرور این کار رو مدیریت کنه :) (11 سال پیش)
0
0
ای بابا :D _ اگه بخوایم فایل اتچ کنیم چطور ؟ (11 سال پیش)
+1
0
1 - فایل رو آپلود کنید که قبلا بحث شده و به نتیجه رسیدیم و پاسخ تو انجمن هست ، 2 - با اینتنت هم میشه فایل پیوست کرد :) (11 سال پیش)
+1
0
خوب فایل اتچ کن .... مگه برنامه جیمل یا ایمیل فایل اتچ نمیکنه؟؟؟؟ اینتنت به نظرخودم بهتره شاید طرف بخواد با یاهو ایمیل بفرسته (11 سال پیش)
0
0
اگر کسی یاهو داشته باشه < میشه از API سرور یاهو استفاده کرد < قراره از این سورس بعد از اینکه اطلاعات ست میشه بصورت سرویس استفاده بشه و از طر کاربر طی زمان معین شده ایمیل فرستاده تا زمانی که برنامه متوقف یشه< در اونصورت مشکلی پیش نمیاد؟ (11 سال پیش)
0
0
پروژه رو هم اپلود و لینک مستقیم گذاشتم میتونید IMPORT کنید و تست کنید ! (11 سال پیش)
+2
0
من این روش رو امتحان کردم و بدرستی کار کرد لینک (11 سال پیش)
0
0
میشه پروژه ایی رو که استفاده کردید رو اپلود کنید < من از این آموزش قبلا استفاده کردم اما جواب نداده ! (11 سال پیش)
+1
0
من این کد رو با کمی تغییر داخل پروژه ای استفاده کردم که متاسفانه نمیتونم قرار بدم.اما همون مثالی که خودش داخل سایت قرار داده واسه من کار میکنه واسه شما چه اروری میده؟ (11 سال پیش)
0
0
اول از همه اجازه نمیده که فایل های jar رو build کنم < و فکر میکنم که فقط با API 18 سازگار باشه و برای API 8 (اندروید 2.2) کارایی نداشته باشه ! (11 سال پیش)
+1
0
criss لینکش که توی سایتش هم بود : لینک (11 سال پیش)
0
0
من همین پروژه دانلود کردم < مشکلاتی که بالا گفتم (11 سال پیش)
+1
0
چرا نمیشه ایمپورت کرد. عکس خطا رو بزار. (11 سال پیش)
+1
0
ضمنا اون پروژه ای که شما آپلود کردی یک ریسک امنیتی داره اینه که اگه یوزرنیم و پسوورد رو در برنامه قرار بدی و برنامه رو منتشر کنی ممکنه کسی برنامه رو دیکامپایل کنه و یوزرنیم و پسوورد رو بدست بیاره(میتونه پسوورد ایمیل رو عوض کنه و برنامه به درستی کار نکنه- میتونه ایمیل ها رو بخونه و هزار تا کار دیگه) (11 سال پیش)
0
0
لینک (11 سال پیش)
+1
0
میگه target 18 رو نداری.حالا که نداری بزار روی بالاترین target ای که داری.مثلا 19 یا 21. (11 سال پیش)
0
0
اره < بالاترین ورژنی که دارم 15 هست (11 سال پیش)
+1
0
خوب بزار روی 15 ببین درست میشه یا نه. (11 سال پیش)
+1
0
دقیقا مشکلی که گفتید در این روش هست.منم واسه یه پروژه شخصی استفاده کردم و برای انتشار کلا این روش مشکل داره.شما هر سه فایل jar رو داخل پروژه قرار دادید؟ (11 سال پیش)
0
0
هر سه فایل رو توی پروژه گذاشتم < اما اجاره Build نمیده < توی لینک عکس بالاتر مشخصه (11 سال پیش)
+1
0
با یکم دقت مشکلتون حل میشه ولی من مثالو داخل یه پروژه جدید ریختم که بتونید استفاده کنید اپلود میکنم و لینک رو قرار میدم (11 سال پیش)
+1
0
لینک (11 سال پیش)
برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال
Criss
11 سال پیش
+1
0
فقط و فقط این لاگ رو میده !
11-03 22:05:54.770: I/SSLSocketFactory(7751): Using factory org.apache.harmony.xnet.provider.jsse.OpenSSLSocketFactoryImpl@4007ed70
و اینطور که پیداست از دستورات زیر خط اخر // some other problem نمایش داده میشه در Toast
try{
m.addAttachment("/sdcard/myPicture.jpg");// path to file you want to attach
if(m.send()){
// success
Toast.makeText(AutomaticEmailActivity.this,"Email was sent successfully.",Toast.LENGTH_LONG).show();
}else{
// failure
Toast.makeText(AutomaticEmailActivity.this,"Email was not sent.",Toast.LENGTH_LONG).show();
}
}
catch(Exception e){
// some other problem
Toast.makeText(AutomaticEmailActivity.this,"There was a problem sending the email.",Toast.LENGTH_LONG).show();
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .