1. Уже не помню, но помоему у меня он не заработал на новой версии Zimbra, и хотелось решить встроенным функционалом , да и насколько я понял ни один из режимов не отслеживает изменения в описании пользователя, должность например сменилась, телефон, поэтому пусть будет так, тем более хочется всех посадить на Web-интерфейс.
2. LAZY режим вообще не требует этой команды zimbraAutoProvPollingInterval 60m
Вот список настроек для работы LAZY режима:
zmprov md domain.ru zimbraAutoProvMode LAZY - Включение режима LAZY
zmprov md domain.ru zimbraAutoProvAuthMech LDAP - Аутентификация через LDAP
zmprov md domain.ru zimbraAutoProvLdapURL "ldap://pdc.sp.local:3268" - путь к LDAP
zmprov md domain.ru zimbraAutoProvLdapAdminBindDn "cn=zimbra,cn=users,dc=sp,dc=local" - Учетная запись для осуществелния поиска по глобальному каталогу
zmprov md domain.ru zimbraAutoProvLdapAdminBindPassword password - пароль учетной записи для поиска
zmprov md domain.ru zimbraAutoProvLdapSearchBase "ou=employees,dc=sp,dc=local" - поисковая база
zmprov md domain.ru zimbraAutoProvLdapSearchFilter "(&(sAMAccountName=%u)(mail=*domain.ru))" - фильт для поиска по глобальному каталогу (проводится поиск по имени учетной записи в AD и полю mail, т.к. на одном сервере несколько доменов, но каталог один.)
zmprov md domain.ru zimbraAutoProvLdapBindDn "%u@%d" - привязка, в каком формате искать в поисковой базе
zmprov md domain.ru zimbraAutoProvAccountNameMap samAccountName - брать в качестве аккаунта почты аккаунт учетной записи в каталоге
zmprov md domain.ru +zimbraAutoProvAttrMap sn=sn +zimbraAutoProvAttrMap description=description +zimbraAutoProvAttrMap givenName=givenName +zimbraAutoProvAttrMap displayName=displayName - задание соответствия полей Zimbra глобальному каталогу (т.е. имя = имя, фамилия = фамилия, описание = описание, и поле отображаемое имя тоже подхватывается, отчество подхватывать смысла нет.
zmprov md domain.ru zimbraAutoProvNotificationFromAddress admin@domain.ru - от чьего имени будут приходить сообщения о автоматическом создании учетной записи (не обязательно включать)
at org.alfresco.repo.replication.ReplicationActionExecutor.executeImpl(ReplicationActionExecutor.java:265)
at org.alfresco.repo.action.executer.ActionExecuterAbstractBase.execute(ActionExecuterAbstractBase.java:241)
at org.alfresco.repo.action.ActionServiceImpl.directActionExecution(ActionServiceImpl.java:822)
at org.alfresco.repo.action.ActionServiceImpl.executeActionImpl(ActionServiceImpl.java:723)
at org.alfresco.repo.action.AsynchronousActionExecutionQueueImpl$ActionExecutionWrapper$1$1.execute(AsynchronousActionExecutionQueueImpl.java:405)
at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:433)
at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:304)
at org.alfresco.repo.action.AsynchronousActionExecutionQueueImpl$ActionExecutionWrapper$1.doWork(AsynchronousActionExecutionQueueImpl.java:414)
at org.alfresco.repo.security.authentication.AuthenticationUtil.runAs(AuthenticationUtil.java:529)
at org.alfresco.repo.action.AsynchronousActionExecutionQueueImpl$ActionExecutionWrapper.run(AsynchronousActionExecutionQueueImpl.java:417)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
09:32:02,404 INFO [org.alfresco.repo.management.subsystems.ChildApplicationContextFactory] Starting 'googledocs' subsystem, ID: [googledocs, v2]
09:32:02,982 WARN [org.alfresco.util.OpenOfficeConnectionTester] Error trying to query Open Office version information. OpenOffice.org's ConfigurationRegistry not implemented in this version of OOo. This should not affect the operation of OOo.
09:32:02,998 INFO [org.alfresco.util.OpenOfficeConnectionTester] The OpenOffice connection was re-established.
09:32:02,998 INFO [org.alfresco.repo.management.subsystems.ChildApplicationContextFactory] Startup of 'googledocs' subsystem, ID: [googledocs, v2] complete
09:32:03,201 INFO [org.alfresco.module.vti.VtiServer] Vti server started successfully on port: 7070
09:32:03,201 INFO [org.alfresco.module.vti.VtiServer] Vti server SessionIdManagerWorkerName: jetty1
09:32:03,748 ERROR [org.alfresco.repo.action.executer.MailActionExecuter] Failed to send email to Vitaliksol7@gmail.com
org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Could not connect to SMTP host: 127.0.0.1, port: 25;
nested exception is:
java.net.ConnectException: Connection refused: connect. Failed messages: javax.mail.MessagingException: Could not connect to SMTP host: 127.0.0.1, port: 25;
at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:232)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1250)
... 53 more
09:32:03,795 WARN [org.alfresco.repo.activities.feed.FeedNotifier] FeedNotifier: Failed to process entry "Person admin".
org.alfresco.error.AlfrescoRuntimeException: 01180002 Failed to send email to:Vitaliksol7@gmail.com
at org.alfresco.repo.action.executer.MailActionExecuter.sendEmail(MailActionExecuter.java:659)
at org.alfresco.repo.action.executer.MailActionExecuter.executeImpl(MailActionExecuter.java:338)
at org.alfresco.repo.action.executer.ActionExecuterAbstractBase.execute(ActionExecuterAbstractBase.java:241)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.alfresco.repo.management.subsystems.SubsystemProxyFactory$1.invoke(SubsystemProxyFactory.java:72)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy230.execute(Unknown Source)
at org.alfresco.repo.action.ActionServiceImpl.directActionExecution(ActionServiceImpl.java:822)
at org.alfresco.repo.action.ActionServiceImpl.executeActionImpl(ActionServiceImpl.java:723)
at org.alfresco.repo.action.ActionServiceImpl.executeAction(ActionServiceImpl.java:557)
at org.alfresco.repo.action.ActionServiceImpl.executeAction(ActionServiceImpl.java:543)
at org.alfresco.repo.action.ActionServiceImpl.executeAction(ActionServiceImpl.java:831)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.alfresco.repo.security.permissions.impl.AlwaysProceedMethodInterceptor.invoke(AlwaysProceedMethodInterceptor.java:34)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:46)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:159)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy40.executeAction(Unknown Source)
at org.alfresco.repo.activities.feed.EmailUserNotifier.notifyUser(EmailUserNotifier.java:161)
at org.alfresco.repo.activities.feed.AbstractUserNotifier.notifyUser(AbstractUserNotifier.java:193)
at org.alfresco.repo.activities.feed.FeedNotifierImpl$1.processInternal(FeedNotifierImpl.java:309)
at org.alfresco.repo.activities.feed.FeedNotifierImpl$1.access$200(FeedNotifierImpl.java:269)
at org.alfresco.repo.activities.feed.FeedNotifierImpl$1$1.execute(FeedNotifierImpl.java:297)
at org.alfresco.repo.activities.feed.FeedNotifierImpl$1$1.execute(FeedNotifierImpl.java:294)
at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:433)
at org.alfresco.repo.activities.feed.FeedNotifierImpl$1.process(FeedNotifierImpl.java:293)
at org.alfresco.repo.activities.feed.FeedNotifierImpl$1.process(FeedNotifierImpl.java:269)
at org.alfresco.repo.batch.BatchProcessor$TxnCallback.execute(BatchProcessor.java:712)
at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:433)
at org.alfresco.repo.batch.BatchProcessor$TxnCallback.run(BatchProcessor.java:756)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Could not connect to SMTP host: 127.0.0.1, port: 25;
nested exception is:
java.net.ConnectException: Connection refused: connect. Failed messages: javax.mail.MessagingException: Could not connect to SMTP host: 127.0.0.1, port: 25;
at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:232)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1250)
... 53 more
09:32:05,561 ERROR [org.alfresco.repo.action.executer.MailActionExecuter] Failed to send email to Виталя@mail.ru
org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Could not connect to SMTP host: 127.0.0.1, port: 25;
nested exception is:
java.net.ConnectException: Connection refused: connect. Failed messages: javax.mail.MessagingException: Could not connect to SMTP host: 127.0.0.1, port: 25;
at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:232)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1250)
... 53 more
09:32:05,576 WARN [org.alfresco.repo.activities.feed.FeedNotifier] FeedNotifier: Failed to process entry "Person Виталя".
org.alfresco.error.AlfrescoRuntimeException: 01180003 Failed to send email to:Виталя@mail.ru
at org.alfresco.repo.action.executer.MailActionExecuter.sendEmail(MailActionExecuter.java:659)
at org.alfresco.repo.action.executer.MailActionExecuter.executeImpl(MailActionExecuter.java:338)
at org.alfresco.repo.action.executer.ActionExecuterAbstractBase.execute(ActionExecuterAbstractBase.java:241)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.alfresco.repo.management.subsystems.SubsystemProxyFactory$1.invoke(SubsystemProxyFactory.java:72)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy230.execute(Unknown Source)
at org.alfresco.repo.action.ActionServiceImpl.directActionExecution(ActionServiceImpl.java:822)
at org.alfresco.repo.action.ActionServiceImpl.executeActionImpl(ActionServiceImpl.java:723)
at org.alfresco.repo.action.ActionServiceImpl.executeAction(ActionServiceImpl.java:557)
at org.alfresco.repo.action.ActionServiceImpl.executeAction(ActionServiceImpl.java:543)
at org.alfresco.repo.action.ActionServiceImpl.executeAction(ActionServiceImpl.java:831)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.alfresco.repo.security.permissions.impl.AlwaysProceedMethodInterceptor.invoke(AlwaysProceedMethodInterceptor.java:34)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:46)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:159)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy40.executeAction(Unknown Source)
at org.alfresco.repo.activities.feed.EmailUserNotifier.notifyUser(EmailUserNotifier.java:161)
at org.alfresco.repo.activities.feed.AbstractUserNotifier.notifyUser(AbstractUserNotifier.java:193)
at org.alfresco.repo.activities.feed.FeedNotifierImpl$1.processInternal(FeedNotifierImpl.java:309)
at org.alfresco.repo.activities.feed.FeedNotifierImpl$1.access$200(FeedNotifierImpl.java:269)
at org.alfresco.repo.activities.feed.FeedNotifierImpl$1$1.execute(FeedNotifierImpl.java:297)
at org.alfresco.repo.activities.feed.FeedNotifierImpl$1$1.execute(FeedNotifierImpl.java:294)
at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:433)
at org.alfresco.repo.activities.feed.FeedNotifierImpl$1.process(FeedNotifierImpl.java:293)
at org.alfresco.repo.activities.feed.FeedNotifierImpl$1.process(FeedNotifierImpl.java:269)
at org.alfresco.repo.batch.BatchProcessor$TxnCallback.execute(BatchProcessor.java:712)
at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:433)
at org.alfresco.repo.batch.BatchProcessor$TxnCallback.run(BatchProcessor.java:756)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Could not connect to SMTP host: 127.0.0.1, port: 25;
nested exception is:
java.net.ConnectException: Connection refused: connect. Failed messages: javax.mail.MessagingException: Could not connect to SMTP host: 127.0.0.1, port: 25;
Всё просто. В зибмре можно создавать несколько доменов например обслуживаешь ты 3 организации и в ад у каждой свой домен например:
первый rus.ru
второй prikol.ru
третий jaja.ru
А тебе нужно чтобы каждый почтовый ящик был в своём. Но если у тебя только один домен. То везде можешь (подставлять) только его. У меня опльзователи крутятся на внутреннем серваке (серых IP ) а в инет я просто пробросил порты (точнее не я а мой коллега. Не пускает он меня к ISA серверу :D)
P.S. спасиб за отзыв не думал что столько лайков соберу со своей статьи.
Уважаемы автор, большое спасибо за статью тем более что выяснилось что autoprovising в зимбре так и не работает. Но вопрос немного по другому поводу. Как ты написал у тебя почтовый домен и домен АД один и тот же, тоесть насколько я понимаю либо у тебя почта только для внутреннего пользования либо ты пересылаешь почту через внешний релей? если так то не мог бы ты подробнее рассказать как ты это настраивал и что получил?
https://www.google.ru/search?q=alfresco+database+structure&aq=f&um=1&tbm=isch&source=og&sa=N&tab=wi
Вряд ли разработчики Alfresco ее актуализируют и вообще делают сами. В БД крайне не рекомендуется "лазить" руками. Используйте API для изменения данных, добавления новых, получения выборок итд, их более чем достаточно, и только так ваш код будет совместим с будущими версиями Alfresco.
2. LAZY режим вообще не требует этой команды zimbraAutoProvPollingInterval 60m
Вот список настроек для работы LAZY режима:
zmprov md domain.ru zimbraAutoProvMode LAZY - Включение режима LAZY
zmprov md domain.ru zimbraAutoProvAuthMech LDAP - Аутентификация через LDAP
zmprov md domain.ru zimbraAutoProvLdapURL "ldap://pdc.sp.local:3268" - путь к LDAP
zmprov md domain.ru zimbraAutoProvLdapAdminBindDn "cn=zimbra,cn=users,dc=sp,dc=local" - Учетная запись для осуществелния поиска по глобальному каталогу
zmprov md domain.ru zimbraAutoProvLdapAdminBindPassword password - пароль учетной записи для поиска
zmprov md domain.ru zimbraAutoProvLdapSearchBase "ou=employees,dc=sp,dc=local" - поисковая база
zmprov md domain.ru zimbraAutoProvLdapSearchFilter "(&(sAMAccountName=%u)(mail=*domain.ru))" - фильт для поиска по глобальному каталогу (проводится поиск по имени учетной записи в AD и полю mail, т.к. на одном сервере несколько доменов, но каталог один.)
zmprov md domain.ru zimbraAutoProvLdapBindDn "%u@%d" - привязка, в каком формате искать в поисковой базе
zmprov md domain.ru zimbraAutoProvAccountNameMap samAccountName - брать в качестве аккаунта почты аккаунт учетной записи в каталоге
zmprov md domain.ru +zimbraAutoProvAttrMap sn=sn +zimbraAutoProvAttrMap description=description +zimbraAutoProvAttrMap givenName=givenName +zimbraAutoProvAttrMap displayName=displayName - задание соответствия полей Zimbra глобальному каталогу (т.е. имя = имя, фамилия = фамилия, описание = описание, и поле отображаемое имя тоже подхватывается, отчество подхватывать смысла нет.
zmprov md domain.ru zimbraAutoProvNotificationFromAddress admin@domain.ru - от чьего имени будут приходить сообщения о автоматическом создании учетной записи (не обязательно включать)
первый rus.ru
второй prikol.ru
третий jaja.ru
А тебе нужно чтобы каждый почтовый ящик был в своём. Но если у тебя только один домен. То везде можешь (подставлять) только его. У меня опльзователи крутятся на внутреннем серваке (серых IP ) а в инет я просто пробросил порты (точнее не я а мой коллега. Не пускает он меня к ISA серверу :D)
P.S. спасиб за отзыв не думал что столько лайков соберу со своей статьи.
Но некоторые вещи все равно придется дописывать в конфиг вручную.
Вряд ли разработчики Alfresco ее актуализируют и вообще делают сами. В БД крайне не рекомендуется "лазить" руками. Используйте API для изменения данных, добавления новых, получения выборок итд, их более чем достаточно, и только так ваш код будет совместим с будущими версиями Alfresco.