2009-12-08 3 views
2

Мне нужно отправить электронные письма из моего приложения, которое развернуто на Weblogic 10.0. Я пытаюсь поместить свойства сеанса почты на сервер. Свойства, такие как mail.host или mail.debug работают нормально. Но как мне настроить пароль? Теперь у меня есть это в конфигурационном файле пружинного:Как сохранить почтовый пароль на стороне сервера?

<bean id="mailSender" 
    class="org.springframework.mail.javamail.JavaMailSenderImpl"> 
    <property name="session" ref="mailSession"/> 
    <property name="username" value="myLogin"></property> 
    <property name="password" value="myPassword"></property> 
</bean>  
<bean id="alertsMailSession" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName"> 
     <value>mail/mainSession</value> 
    </property>  
    <property name="resourceRef"> 
     <value>true</value> 
    </property> 
</bean> 

Я попытался mail.smtp.password собственности, но она не работает. Документация Sun говорит, что для пароля нет свойства (хотя в некоторых примерах я видел mail.smtp.password). Итак, как мне это сделать? Возможно ли иметь информацию о логине/пароле, настроенную на сервере, а не в приложении?

EDIT
Все вы предлагаете некоторые файлы свойств. Я не хочу их. У меня есть почтовый сеанс на моем сервере приложений. Я получаю эту сессию JNDI. Я могу настроить там хост для отправки писем и т. Д. Но я не могу положить туда пароль. Это не работает. Я хочу, чтобы все настройки выполнялись с помощью консоли Weblogic. Как это сделать?

ответ

2

Не уверен, будет ли это помочь в WebLogic, как я работаю с WEBSPHERE атм, но я предположил бы, что будет работать в WebLogic, а также:

настроить свой логин и пароль в весеннем контексте как таковой:

<bean id="mailSender" 
    class="org.springframework.mail.javamail.JavaMailSenderImpl"> 
<property name="session" ref="mailSession"/> 
<property name="username"> 
    <jee:jndi-lookup jndi-name="config/mail/username" resource-ref="true"/> 
</property> 
<property name="password"> 
    <jee:jndi-lookup jndi-name="config/mail/password" resource-ref="true"/> 
</property> 

и добавьте следующий код в ваш web.xml:

<env-entry> 
    <env-entry-name>config/mail/username</env-entry-name> 
    <env-entry-type>java.lang.String</env-entry-type> 
    <env-entry-value></env-entry-value> 
</env-entry> 
<env-entry> 
    <env-entry-name>config/mail/password</env-entry-name> 
    <env-entry-type>java.lang.String</env-entry-type> 
    <env-entry-value></env-entry-value> 
</env-entry> 

Spring будет искать значения для имени пользователя и пароля из среды веб-приложения. Консоль администратора веб-журнала должна позволять вам настраивать записи среды и, следовательно, имя пользователя и пароль. Обратите внимание: вам, вероятно, придется перезапустить приложение, чтобы изменения вступили в силу, поскольку они будут загружаться только при начале весеннего контекста, однако настройки для изменения почтового сервера являются довольно значительным изменением, поэтому перезагрузка это не было бы ошибкой.

+0

Кажется лучшая идея. К сожалению, консоль администрирования Weblogic не имеет редактора переменных среды. Или я не могу его найти. Во всяком случае, я принимаю ваш ответ как самое полезное из всех, что мне дали. –

0

Уже есть ответы на использование файла свойств, но один важный аспект, который может отсутствовать. Необходимо ли защищать пароль учетной записи?

Если это так, вы можете подумать о шифровании файла или ключа. Простой встроенный ключ шифрования в коде может быть достаточным. Либо зашифруйте поле, либо весь файл.

1

Существует способ сделать это, хотя Weblogic автоматически не распознает свойство mail.smtp.password. Вы можете добавить это свойство, как обычно, к JavaMail Свойства поля и отправить по электронной почте в вашем EJB следующим образом:

@Stateless 
public class MailBean { 
    @Resource(name="mail/MailSession") 
    private Session session; 

    public void sendMail() { 
     Transport transport = null; 
     try { 
      Message message = new MimeMessage(session); 
      // prepare your mail here... 
      transport = session.getTransport("smtp"); 
      String user = session.getProperty("mail.smtp.user"); 
      String password = session.getProperty("mail.smtp.password"); 
      transport.connect(user, password); 
      message.saveChanges(); 
      transport.sendMessage(message, message.getAllRecipients()); 
     } finally { 
      if (transport != null) try { transport.close(); } 
      catch (MessagingException e) { e.printStackTrace(); } 
     } 
    } 
} 
Смежные вопросы