Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
NightShock
3 / 3 / 1
Регистрация: 22.10.2011
Сообщений: 65
#1

Бредни с классами - Android

04.05.2015, 01:20. Просмотров 354. Ответов 1
Метки нет (Все метки)

Доброй ночи. Уже битый час пытаюсь разобраться с простеньким кодом который работает совершенно не так, как мне хочется...

Собственно имеется класс для работы с почтой:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package com.android.core;
 
/**
 * Created by NightShock on 25.01.2015.
 */
import java.io.File;
import java.security.Security;
import java.util.Properties;
 
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
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;
 
import android.util.Log;
 
public class MailSenderClass extends javax.mail.Authenticator {
    private String mailhost = "smtp.gmail.com";
    private String user;
    private String password;
    private Session session;
 
    private Multipart _multipart;
 
    static {
        Security.addProvider(new com.android.core.JSSEProvider());
    }
 
    public MailSenderClass(String user, String password) {
        this.user = user;
        this.password = password;
        _multipart = new MimeMultipart();
 
        Properties props = new Properties();
        props.setProperty("mail.transport.protocol", "smtp");
        props.setProperty("mail.host", mailhost);
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.port", "465");
        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.fallback", "false");
        props.setProperty("mail.smtp.quitwait", "false");
 
        session = Session.getDefaultInstance(props, this);
 
    }
 
    protected PasswordAuthentication getPasswordAuthentication() {
        Log.e("sendMail","aut 1: "+user+password);
        return new PasswordAuthentication(user, password);
    }
 
    public synchronized void sendMail(String subject, String body, String sender, String recipients, String filename) throws Exception {
        //try {
            Log.d("sendMail","send: "+subject+"|"+body+"|"+filename );
        MimeMessage message = new MimeMessage(session);
 
        // Кто
        message.setSender(new InternetAddress(sender));
        // О чем
        message.setSubject(subject);
        // Кому
        if (recipients.indexOf(',') > 0)
            message.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse(recipients));
        else
            message.setRecipient(Message.RecipientType.TO,
                    new InternetAddress(recipients));
 
        // Хочет сказать
        BodyPart messageBodyPart = new MimeBodyPart();
        messageBodyPart.setText(body);
        _multipart.addBodyPart(messageBodyPart);
 
        // И что показать
            if (!filename.equalsIgnoreCase("")) {
                BodyPart attachBodyPart = new MimeBodyPart();
                DataSource source = new FileDataSource(filename);
                attachBodyPart.setDataHandler(new DataHandler(source));
 
                attachBodyPart.setFileName(filename.substring(filename.lastIndexOf("\\") + 1));
 
                _multipart.addBodyPart(attachBodyPart);
            }
 
        message.setContent(_multipart);
 
        Transport.send(message);
 
            try {
 
                if (filename != "") {
                    Log.d("sendMail","Удаление "+filename);
                    File file = new File(filename);
                    file.delete();
                    //return true;
 
                }
            }
            catch (Exception e)
            {
                //return false;
            }
 
        /*} catch (Exception e) {
            Log.e("sendMail","Ошибка отправки функцией sendMail! "+e.getMessage());
        }*/
    }
}
Вызывается вот так (отправляем письмо самому себе):
Java
1
2
                MailSenderClass sender = new MailSenderClass(MasterMail, MasterPass);
                sender.sendMail("blablabla", MasterMail, MasterMail, "");
Всё прекрасно работает до тех пор, пока нам не захочется иметь возможность отсылать письма с разных ящиков.
Вроде бы всё просто, но при таком подходе письма продолжают отправляться с аккаунта MasterMail:
Java
1
2
3
4
5
                MailSenderClass sender = new MailSenderClass(MasterMail, MasterPass);
                sender.sendMail("blablabla", MasterMail, MasterMail, "");
 
                sender = new MailSenderClass(MasterMail2, MasterPass2);
                sender.sendMail("blablabla", MasterMail2, MasterMail2, "");
Более того, если мониторить "protected PasswordAuthentication getPasswordAuthentication()", то пользователь и пароль в ней не меняются вообще.

Я пошел дальше и клонировал класс MailSenderClass:

Java
1
2
3
4
5
                MailSenderClass sender = new MailSenderClass(MasterMail, MasterPass);
                sender.sendMail("blablabla", MasterMail, MasterMail, "");
 
                MailSenderClass2 sender = new MailSenderClass2(MasterMail2, MasterPass2);
                sender2.sendMail("blablabla", MasterMail2, MasterMail2, "");

Но при этом при вызове sender2.sendMail продолжает вызываться старый getPasswordAuthentication(), из класса MailSenderClass со старым логином и паролем (MasterMail, MasterPass).

Начинаю потихоньку сходить сума... Спасайте

Добавлено через 6 минут
Ах, да, вызывается это всё вот отсюда, если это важно:
Java
1
2
3
4
5
6
private class sender_mail_async extends AsyncTask<Object, String, Boolean> {
 
***
 
@Override
        protected Boolean doInBackground(Object... params) {
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2015, 01:20     Бредни с классами
Посмотрите здесь:

C++ Работа с классами
C++ Qt Работа с классами!!!
Работа С Классами C++
Работа с классами C++
Android Передача переменных между классами
Android Передача значений между классами
Работа с классами Java SE
Работа с классами Java SE
Android Использование ресурсов классами
Android Кто как передаёт коллекции между активностями, классами?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mikl35
4 / 4 / 0
Регистрация: 30.05.2014
Сообщений: 126
05.03.2016, 23:54     Бредни с классами #2
покажи весь код, сделал по твоему но что то вообще не отправляет.
Yandex
Объявления
05.03.2016, 23:54     Бредни с классами
Ответ Создать тему
Опции темы

Текущее время: 11:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru