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

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

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

Бредни с классами - Программирование Android

04.05.2015, 01:20. Просмотров 384. Ответов 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) {
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2015, 01:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Бредни с классами (Программирование Android):

Использование ресурсов классами - Программирование Android
В приложении есть кнопка и TextView. Пользователь жмёт клавишу. После нажатия клавиши я хочу, чтобы создался объект другого класса...

Затруднения с классами в простой задачке - Программирование Android
Здравствуйте! Очень слабо разбираюсь в Jave , но нужн скомпиллиовать для андроид-приложения код: Собственно код: String week =...

Передача данных между классами - Программирование Android
Добрый день господа. Пишу свое первое приложение на андроид, и столкнулся с вот такой проблемой. Чего я ожидаю от приложения. В...

Передача переменных между классами - Программирование Android
Есть Main.java и Settings.java Settings.java содержит: public void onCreate(Bundle savedInstanceState) { ...

Передача значений между классами - Программирование Android
Как передать значение int-овой переменной из одного класса в другой? Всё было бы просто если оба класса были унаследованы от Activity....

Кто как передаёт коллекции между активностями, классами? - Программирование Android
Всем привет! Поделитесь опытом. Допустим, в одном классе вы накапливаете данные (ArrayList), в другой передаёте. Там можете вывести в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
mikl35
4 / 4 / 0
Регистрация: 30.05.2014
Сообщений: 129
05.03.2016, 23:54 #2
покажи весь код, сделал по твоему но что то вообще не отправляет.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2016, 23:54
Привет! Вот еще темы с ответами:

Работа с классами - C++
Имеется заголовочный файл В нем создаю два класса Vector и MyCamera. class Vector { public: float x,y,z; }; ...

.NET 4.x Работа с классами - C#
Здравствуйте, только начал изучать C# и у меня очень стрёмные вопросы. В рамках образования писал программу на WinForm и решил...

Работа с классами - C++
Помогите написать програмку задание следующее: Создать базовый класс «Грузоперевозчик» и производные классы «Самолет», «Поезд»,...

Работа с классами - Delphi
Собственно говоря, как вызвать определённый метод для всех объектов класса?


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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