بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

ارسال ایمیل smtp

مدیریت گفتگو
Criss 12 سال پیش
آخرین تغییر: 9 سال پیش

سلام دوستان من خیلی سرچ کردم و کلی سورس رو امتحان کردم

اما با هیچ کدوم موفق به ارسال ایمیل نشدم !!!

 

http://stackoverflow.com/questions/16421706/how-do-you-send-mail-in-android-using-javamail-api

http://blog.dahanne.net/2013/06/17/sending-a-mail-in-java-and-android-with-apache-commons-net/

http://mobiledevtuts.com/android/android-sdk-smtp-email-tutorial/

http://snipplr.com/view/16645/sending-email-on-android-by-smtp-gmail/

 

 

اگر ممکنه راهنمایی کنید که چطور میشه با استفاده از اکانت جیمیل ایمیل فرستاد ؟

نظرات

sadeghbarout 12 سال پیش
میخوای مستقیما از تو برنامه ات ایمیل بفرستی یا با برنامه gmail روی گوشی منظورته؟

پاسخ‌ها 5

Criss 12 سال پیش

میخوام از درون برنامه با استفاده از سورس کد های smtp با استفاده از جیمیل ایمیل ارسال کنم

smtpserver = "smtp.gmail.com" 
smtpserverport = 465
smtpusessl = True
username= "user@gmail.com"
password = "passwd"

body = "text"
subject = "sub"
to = "user1@yahoo.com,user3@gmail.com"
bcc = "user3@gmail.com
attachment = "sdcard/media/file.jpg"

برای مثال توی اکثر سورس های visualbasic یا vbscript یا powershell یا php  و ...  مشخصات اصلی اینهایی هست که بالا گذاشتم <

که متد های bcc , atachment  هم به اختیار میشه به اوناها اضاف کرد

نظرات

مجتبی یگانه 12 سال پیش
چرا از یه فایل php استفاده نمی کنید ؟ ، در غیر اینصورت باید با Intent ها کار کنید
Criss 12 سال پیش
اگر ممکنه اموزش ارسال ایمیل php رو هم بزارید اما جیمیل رو ترجیح میدم < چون در صورت نبود هاست هم کارایی خودش رو داره
مجتبی یگانه 12 سال پیش

ایمیل فرستادن با php بسیار سادست ! ، فقط روی لوکال هاست با تنظیمات پیشفرض نیمشه فرستاد ، بهتره روی هاست تست کنید

http://php.net/manual/en/function.mail.php

mail ( string $to , string $subject , string $message 
[, string $additional_headers [,string $additional_parameters ]] )
mail('mail@server.com','subject','message');

پیوست فایل

http://stackoverflow.com/questions/826265/simple-php-form-attachment-to-email-code-golf

نظرات

Criss 12 سال پیش
چطوری میشه همراه با این ایمیل فایلی رو هم اتچ کرد؟ این ایمیل ها از پهنای باند هاست هم استفاده میکنه درسته ؟
Aref 12 سال پیش
این کد رو دیدم ولی نمیدونم چطور میشه ازش استفاده کرد ، میشه خیلی ساده توضیح بدین یا لینک برنامش رو واسم بفرستین ؟ من کار با فایل php داخل اندروید و ارتباط با وب رو هنوز بلد نیستم
Criss 10 سال پیش

این کد بخوبی کار میکنه :

 

 
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;


public class TestEmail extends Activity {

private static final String username = "EMAIL@gmail.com";
private static final String password = "PASSWORD";


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Button sendButton = (Button) findViewById(R.id.send_email);

sendButton.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View view) {
String email = "EMAIL@gmail.com";
String subject = "SUB";
String message = "MSG";
sendMail(email, subject, message);
}
});
}


private void sendMail(String email, String subject, String messageBody) {
Session session = createSessionObject();

try {
Message message = createMessage(email, subject, messageBody, session);
new SendMailTask().execute(message);
}
catch (AddressException e) {
e.printStackTrace();
}
catch (MessagingException e) {
e.printStackTrace();
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}


private Message createMessage(String email, String subject, String messageBody, Session session) throws MessagingException, UnsupportedEncodingException {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("EMAIL@gmail.com", "New Sell"));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(email, email));
message.setSubject(subject);
message.setText(messageBody);
return message;
}


private Session createSessionObject() {
Properties properties = new Properties();
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.host", "smtp.gmail.com");
properties.put("mail.smtp.port", "587");

return Session.getInstance(properties, new javax.mail.Authenticator() {

@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
}


private class SendMailTask extends AsyncTask<Message, Void, Void> {

private ProgressDialog progressDialog;


@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = ProgressDialog.show(TestEmail.this, "لطفا صبر کنید", "در حال ارسال اطلاعات سفارش", true, false);
}


@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
progressDialog.dismiss();
Toast.makeText(getBaseContext(), "سفارش با موفقیت ثبت شد.", Toast.LENGTH_LONG).show();
finish();
}


@Override
protected Void doInBackground(Message... messages) {
try {
Transport.send(messages[0]);
}
catch (MessagingException e) {
e.printStackTrace();
}
return null;
}
}
}

لایبری مورد نیاز

نظرات

hamed 10 سال پیش
ممنون از معرفی اما هنوز یک مشکل کماکان وجود داره و اون هم اینه که ما پسورد را داریم در برنامه قرار می دهیم و به هر حال امنیت اون را نمی شه تضمین کرد. پیشنهاد من اینه که این مقادیر را از سرور به برنامه پاس بدیم (حتی پورت و هاست و ... را) تا هم امنیت بیشتر بشود و هم اینکه در صورت بروز مشکل بشه سریعا این مقادیر را تغییر داد.
hamed 10 سال پیش
ضمنا شاید استفاده از یک وب سرویس ارسال ایمیل راه حل مناسب تری باشه تا اطلاعات ایمیل حتی نیاز به پاس داده شدن هم نداشته باشه و فقط اطلاعات مربوط به متن و عنوان ایمیل از کلاینت اندرویدی به وب سرویس پاس داده بشه و وب سرویس نقش ارسال ایمیل را داشته باشه. فقط باید در ایجاد امنیت وب سرویس خیلی دقت کرد چرا که در صورت لو رفتن، می تونه به صورت یک اسپمر هولناک عمل کنه و دامنه شما یا ایمیل شما را به عنوان یک اسپمر در گوگل و ... معرفی کنه.
Criss 9 سال پیش

برای اینکه بتونید با این روش ایمیل ارسال کنید و فایل هم بهش اضافه کنید متد زیر لازمه و چند کار دیگه

 
private void attachFile(Message message, String filePath) {
        try {
            String filename = "example_filename";
            Multipart _multipart = new MimeMultipart();
            BodyPart messageBodyPart = new MimeBodyPart();
            DataSource source = new FileDataSource(filePath);

            messageBodyPart.setDataHandler(new DataHandler(source));
            messageBodyPart.setFileName(filename);

            _multipart.addBodyPart(messageBodyPart);
            message.setContent(_multipart);
        }
        catch (MessagingException e) {
            e.printStackTrace();
        }
    }

و توی قسمت زیر استفاده کنید :

  
  @Override
        protected Void doInBackground(Message... messages) {
            try {
                attachFile(messages[0], "/storage/emulated/legacy/log.txt");
                Transport.send(messages[0]);
            }
            catch (MessagingException e) {
                e.printStackTrace();
            }
            return null;
        }

پرمیژن زیر هم فراموش نکنید که اضاف کنید :

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 

نظرات

reza 9 سال پیش
ممنون که دانش خود رو به اشتراک گذاشتید
reza 9 سال پیش

                                          

نظرات

Criss 9 سال پیش
شما باید بجا /storage/emulated/legacy/log.txt آدرس فایل خودتون رو بدرستی وارد کنید
reza 9 سال پیش
DataHandler و FileDataSource شناخته نمیشن
reza 9 سال پیش
حل شد چند تا لایبرری نیاز داشت

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .