Get it on google play

كيفية ارسال صور عبر البريد الالكتروني عن طريق javamail api



  • ديه داله بتقوم بالاتقاط صوره ازاي اخد الصوره اللي بتتاخد وارسلها عن طريق البريد الالكتروني بطريقة
    Javamail api

                        mCameraSource.takePicture(null, new CameraSource.PictureCallback() {
                        @Override
                        public void onPictureTaken(byte[] bytes) {
                         Bitmap    picture = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
                            try {
                                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                                picture.compress(Bitmap.CompressFormat.PNG, 100, stream);
                                byte[] byteArray = stream.toByteArray();
    
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    });

  • administrators

    اول شئ هتخزن المصفوفة الخاصة بالملف التى احضرتها من الكاميرا الى ملف حقيقى على الموبايل فى مسار معين
    ثم استخدم الكلاس الاتى لترسل بريد به عنوان وموضوع وارفاق ملف



  • @hassan-youssef اخزن المصفوفه ازاي ؟


  • administrators

    وستقوم اولا بتحميل ملفات الـ
    java mail

    من هنا

    https://code.google.com/archive/p/javamail-android/downloads

    ثم تقوم بنسخها ولصقها فى فهرس اسمه
    libs
    فى المشروع


  • administrators

    ثم تقوم بادراج هذه الملفات كمكتبات الى المشروع كما فى الصور

    0_1529592527712_58d3a476-5e0b-476d-8208-d2ca1b20c642-image.png

    0_1529592554782_f0f2ad54-5275-4395-b1e1-efa8efc695f8-image.png

    0_1529592575658_66d2250d-fe4f-440c-99a8-bed99c1be54d-image.png

    0_1529592590138_2c9a26e1-5428-422f-8c51-fcc3734abf5c-image.png


  • administrators

    ثم تقوم بعمل كلاس به بيانات البريد التى ستقوم بالارسال منه
    smtp account

    public class Config {
    public static final String EMAIL ="yourmail@gmail.com";
    public static final String PASSWORD ="password";
    }


  • administrators

    ثم تقوم بعمل كلاس اخر اسمه
    sendmail

    حيث سيكون مسؤل عن اخذ بيانات البريد بما فيها مسار الملف لكى يرسله

    import android.app.ProgressDialog;
    import android.content.Context;
    import android.os.AsyncTask;
    import android.widget.Toast;

    import java.util.Properties;

    import javax.activation.DataHandler;
    import javax.activation.DataSource;
    import javax.activation.FileDataSource;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    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 SendMail extends AsyncTask<Void,Void,Void>
    {
    //Declaring Variables
    private Context context;
    private Session session;

        //Information to send email
        private String email;
        private String subject;
        private String message;
        private String filepath;
        //Progressdialog to show while sending email
        private ProgressDialog progressDialog;
    
        //Class Constructor
        public SendMail(Context context, String email, String subject, String message, String _filepath){
            //Initializing variables
            this.context = context;
            this.email = email;
            this.subject = subject;
            this.message = message;
            this.filepath=_filepath;
        }
    
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            //Showing progress dialog while sending email
            progressDialog = ProgressDialog.show(context,"Sending message","Please wait...",false,false);
        }
    
        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            //Dismissing the progress dialog
            progressDialog.dismiss();
            //Showing a success message
            Toast.makeText(context,"Message Sent",Toast.LENGTH_LONG).show();
        }
    
        @Override
        protected Void doInBackground(Void... params) {
            //Creating properties
            Properties props = new Properties();
    
            //Configuring properties for gmail
            //If you are not using gmail you may need to change the values
            props.put("mail.smtp.host", "smtp.gmail.com");
            props.put("mail.smtp.socketFactory.port", "465");
            props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.port", "465");
    
            //Creating a new session
            session = Session.getDefaultInstance(props,
                    new javax.mail.Authenticator() {
                        //Authenticating the password
                        protected PasswordAuthentication getPasswordAuthentication() {
                            return new PasswordAuthentication(Config.EMAIL, Config.PASSWORD);
                        }
                    });
    
            try {
                //Creating MimeMessage object
                MimeMessage mm = new MimeMessage(session);
    
                //Setting sender address
                mm.setFrom(new InternetAddress(Config.EMAIL));
                //Adding receiver
                mm.addRecipient(Message.RecipientType.TO, new InternetAddress(email));
                //Adding subject
                mm.setSubject(subject);
                //Adding message
                mm.setText(message);
    
                MimeBodyPart messageBodyPart = new MimeBodyPart();
    
                Multipart multipart = new MimeMultipart();
    
                messageBodyPart = new MimeBodyPart();
                String file = filepath;
                String fileName = "attachmentName";
                DataSource source = new FileDataSource(file);
                messageBodyPart.setDataHandler(new DataHandler(source));
                messageBodyPart.setFileName(fileName);
                multipart.addBodyPart(messageBodyPart);
    
                mm.setContent(multipart);
    
                //Sending email
                Transport.send(mm);
    
            } catch (MessagingException e) {
                e.printStackTrace();
            }
            return null;
        }
    

    }


  • administrators

    ثم تقوم بعمل دالة داخل الـ
    mainactivity

    تقوم بارسال البيانات الى الكلاس

    sendmail

    private void sendEmail() {
    //Getting content for email
    String email = editTextEmail.getText().toString().trim();
    String subject = editTextSubject.getText().toString().trim();
    String message = editTextMessage.getText().toString().trim();

       // String yourFilePath = getFilesDir() + "/" + "2.jpg";
       String yourFilePath =Environment.getExternalStorageDirectory()+"/"+  "2.jpg";
        //Creating SendMail object
        SendMail sm = new SendMail(this, email, subject, message,yourFilePath);
    
        //Executing sendmail to send email
        sm.execute();
    }
    

    وقم باستبدال الملف فى هذا المثال
    2.jpg

    بالملف الحقيقى الخاص بك والذى قمت بتخزينه اثناء اخذ الصورة من الكامير


  • administrators

    ويجب عليك وضع بعض التصاريح الاتية فى ملف
    manifest

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



  • @hassan-youssef اخزن ازاي الملف بعد ما اخده من الكاميرا


  • administrators

    لكى تقوم بتخزين ملف من الكاميرا

    String imageDir = Environment.getExternalStorageDirectory()+ "/";

        File directory = getDir(imageDir, Context.MODE_WORLD_WRITEABLE);
        // Create imageDir
        File mypath=new File(directory,"temp.png");
    
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(mypath);
            // Use the compress method on the BitMap object to write image to the OutputStream
            bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fos);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

  • administrators

    ملحوظة اذا كنت سترسل البريد باستخدام
    gmail

    لابد ان تقوم بتشغيل خيار داخل حسابك فى جوجل عن طريق الرابط التالى

    https://myaccount.google.com/lesssecureapps

    Allow less secure apps: ON

    اجعل هذا الخيار
    on

    0_1529594206140_280cd77e-7360-48cd-a422-0f743d6634fb-image.png

    هذا الخيار يجعل الـ
    gmail

    لا يقوم بمنع اى اتصال خارجى به خلال خدمة الـ

    smtp


  • administrators

    هل وصلت المعلومة؟


  • administrators

    اذا كانت الصورة تذهب الى
    gallery
    الخاصة بالموبايل
    فاذا هناك خياران
    اما ان تقوم بجعل المستخدم يختار من الـ
    gallery
    الصورة التى ييقوم بارسالها
    ثم تحصل على المسار الخاص بها الموجود داخل الـ
    gallery

    ثم ترسلها

    او تقوم بتخزين الصورة على الموبايل كما اوضحت سابقا بصرف النظر عن الـ
    gallery

    ثم تقوم بارساله

    واعتقد الطريقة الثانية هى الاسهل لان الاولى ستضطر الى اضافة المزيد من النوافذ والاكواد



  • تمام ربنا يكرمك جزاك الله كل خير



  • @hassan-youssef ازاي استبدل
    2.jpeg
    بالملف اللي عملته


  • administrators

    ارجع التعليقات انا شرحتها


  • administrators

    بالتوفيق باذن الله



  • ظهر عندي الخطا ده لما جيت اعمل
    run
    Error:Execution failed for task ':app:compileDebugJavaWithJavac'.

    java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $



  • @mohamed-rabie

    ديه دالة send mail

        private void sendEmail() {
        //Getting content for email
    
        String email = "mohamed.rabie22@yahoo.com";
        String subject = "help me";
        String message = "help ,e please";
        // String yourFilePath = getFilesDir() + "/" + "2.jpg";
        String yourFilePath =Environment.getExternalStorageDirectory()+"/"+  "temp.png";
        //Creating SendMail object
        SendMail sm = new SendMail(this, email, subject, message,yourFilePath);
    
        //Executing sendmail to send email
        sm.execute();
    }


Suggested Topics