Resources for OpenEMM
Website of OpenEMM with Marketing Information:
Wiki of OpenEMM with Technical Information:
Download of Executable Code of OpenEMM:
Forum for OpenEMM Support:
Source Code of OpenEMM
Web-based software for email automation and marketing (newsletters, multi-stage mail campaigns, transaction mails, autoresponder, etc.)
Home Page: https://www.agnitas.de/en/e-marketing_manager/email-marketing-software-variants/openemm/
License: GNU Affero General Public License v3.0
Resources for OpenEMM
Website of OpenEMM with Marketing Information:
Wiki of OpenEMM with Technical Information:
Download of Executable Code of OpenEMM:
Forum for OpenEMM Support:
Source Code of OpenEMM
More a question, but since the forum and website aren't available I'm going to post it here:
As per documentation an action-based mailing needs to be created for a double-opt-in mail. The target mailing list needs to be selected in this action-based mailing. How would one create a global double-opt-in email for all mailings? We have over 20 mailing lists. Do we need to create 20 action-based mailings? And how would we choose the right action depending on the chosen mailing lists in the registration form?
Hi,
after a fresh OVA Installation i wasn't able to login to the frontend with the generated emm-master password.
Digging into the tomcat logfiles i got:
Caused by: java.sql.SQLException: Data too long for column 'ip_address' at row 1
Query is: INSERT INTO login_track_tbl (ip_address, login_status, username) VALUES (?, ?, ?), parameters ['XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX',10,'emm-master']
... looking into the database i figured out, the ip_address column of login_track_tbl table is only a varchar(20), so i altered it to a varchar(64) - since we have a ipv6 only network.
i looked into the emm-mysql-fulldb-basic.sql and found a few other ip_address cols that where varchar(20) and changed them too.
Regards,
Michael.
diff --git a/frontend/sql/mysql/emm-mysql-fulldb-basic.sql b/frontend/sql/mysql/emm-mysql-fulldb-basic.sql
index 7191641..996b975 100644
--- a/frontend/sql/mysql/emm-mysql-fulldb-basic.sql
+++ b/frontend/sql/mysql/emm-mysql-fulldb-basic.sql
@@ -914,7 +914,7 @@ CREATE UNIQUE INDEX jobqueue$description$unique ON job_queue_tbl (description);
CREATE TABLE login_track_tbl (
login_track_id INT(11) NOT NULL AUTO_INCREMENT COMMENT 'unique ID, use login_track_tbl_seq',
- ip_address VARCHAR(20) COMMENT '[secret_data] address where login-request came from',
+ ip_address VARCHAR(64) COMMENT '[secret_data] address where login-request came from',
creation_date TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'login-request timestamp',
login_status INT(11) COMMENT '10 = successfull, 20 = failed, 40 = successfull but while IP is locked',
username VARCHAR(200) COMMENT '[secret_data] emm-user name used in request',
@@ -923,7 +923,7 @@ CREATE TABLE login_track_tbl (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT '[secret_data] any login-request, successfull or not, is stored here (for a certain time)';
CREATE TABLE login_whitelist_tbl (
- ip_address VARCHAR(20) NOT NULL COMMENT '[secret_data] IP to whitelist',
+ ip_address VARCHAR(64) NOT NULL COMMENT '[secret_data] IP to whitelist',
description VARCHAR(200) NOT NULL COMMENT 'reason to whitelist'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT '[secret_data] listed Adresses will never get Login locked';
@@ -1290,7 +1290,7 @@ CREATE TABLE swyn_click_tbl (
network_id VARCHAR(20) COMMENT 'This is the content of the field "SOURCE" of the SWYN_TBL to identify the network from where the click came.',
mailing_id INT(11) COMMENT 'references mailing (mailing_tbl.mailing_id)',
customer_id INT(11) COMMENT 'references recipient who shared the newsletter (customer_xxx_tbl.customer_id)',
- ip_address VARCHAR(15) COMMENT 'The ip-address of the clicker',
+ ip_address VARCHAR(64) COMMENT 'The ip-address of the clicker',
timestamp TIMESTAMP NULL COMMENT 'The timestamp of the click',
selector VARCHAR(2000) COMMENT 'If the used anon.view is restricted to a part of the newsletter, this contains the selector used to limit the output of the content'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT 'This table records all clicks for displaying a shared newsletter on a network.';
System: CentOS 8
OpenEMM version: 20.10.000.107
When you click the "Manage approval" button on a mailing list, you get a 500 error with the following stacktrace:
2020-12-17 09:32:00,239: ERROR [http-nio-8080-exec-4] org.apache.struts.tiles.taglib.InsertTag - ServletException in '/WEB-INF/jsp/mailinglists/mailinglist-users-view.jsp': File [/WEB-INF/jsp/mailinglists/mailinglist-users-view.jsp] not found
javax.servlet.ServletException: File [/WEB-INF/jsp/mailinglists/mailinglist-users-view.jsp] not found
at org.apache.jasper.servlet.JspServlet.handleMissingResource(JspServlet.java:407)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:374)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:580)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:516)
at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:955)
at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:490)
at org.apache.struts.tiles.TilesUtilImpl.doInclude(TilesUtilImpl.java:138)
at org.apache.struts.tiles.TilesUtil.doInclude(TilesUtil.java:152)
at org.apache.struts.tiles.taglib.InsertTag.doInclude(InsertTag.java:764)
at org.apache.struts.tiles.taglib.InsertTag$InsertHandler.doEndTag(InsertTag.java:896)
at org.apache.struts.tiles.taglib.InsertTag.doEndTag(InsertTag.java:465)
at org.apache.jsp.WEB_002dINF.jsp.ajax_002dresponse_002dtemplate_jsp._jspx_meth_tiles_005finsert_005f1(ajax_002dresponse_002dtemplate_jsp.java:197)
at org.apache.jsp.WEB_002dINF.jsp.ajax_002dresponse_002dtemplate_jsp._jspService(ajax_002dresponse_002dtemplate_jsp.java:134)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:384)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:304)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1286)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1041)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:984)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.agnitas.emm.core.commons.filter.OriginUriFilter.doFilter(OriginUriFilter.java:43)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.agnitas.emm.core.commons.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:80)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.agnitas.emm.core.sessionhijacking.web.GroupingSessionHijackingPreventionFilter.doFilter(GroupingSessionHijackingPreventionFilter.java:105)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.agnitas.web.filter.HttpSecurityHeaderFilter.doFilter(HttpSecurityHeaderFilter.java:108)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.agnitas.emm.core.commons.filter.LoadBalancerFilter.doFilter(LoadBalancerFilter.java:153)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:666)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:688)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1594)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:834)
Hi, I upgraded the virtualbox-OpenEMM Installation from 19 to 20.04 and installed python 3.8.3 like described in openemm_install_admin_guide_2020_1.3.1.pdf too. But now I can't run the installer:
[root@openemm openemm]# bin/OpenEMMInstaller.sh
Checking python installation ...
Python version found: 3.8.3
Mandatory python mysql module is missing!
Command to install python mysql module: 'sudo yum -y install MySQL-python'
Install python mysql module now? Y/n Y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.infonline.de
* centos-sclo-rh: mirror.infonline.de
* centos-sclo-sclo: ftp.hosteurope.de
* extras: ftp.hosteurope.de
* updates: ftp.hosteurope.de
Package MySQL-python-1.2.5-1.el7.x86_64 already installed and latest version
Nothing to do
Mandatory python mysql module is still missing!
I did a check of python mysql, It isn't available for python 3 yet? https://pypi.org/project/MySQL-python/1.2.5/
I ran a dependency check on https://github.com/agnitas-org/openemm/tree/master/frontend/lib, because I found some old versions there. These are the results:
Dependencies Scanned: 137 (110 unique)
Vulnerable Dependencies: 16
Vulnerabilities Found: 83
There are a lot of critical ones including authentication bypasses. Are these all false-positives?
Hi,
I'm trying to generate the online archive for mailings. I used the manual to create the action and form.
If I call the form with https:///form.do?agnCI=1&agnFN=archive_overview OpenEMM goes into the error state. I tried it first with OpenEMM 19, then i updated to 20, but the problem still exists. Since no more precise error code is output (in emm_error.log file), unfortunately no approach for a solution can be found.
2020-06-10 13:05:16,251: ERROR [http-nio-8080-exec-20] com.agnitas.userform.bean.impl.UserFormImpl - Action Error: CompanyID=1, ActionID=8, error codes=[]
Could the error output be improved?
Thanks, Sven
If I add an user group and activate one or more checkboxes, It don't get saved. When I reopen the user group, all checkboxes are off.
Building wheels for collected packages: mariadb
Building wheel for mariadb (pyproject.toml): started
Building wheel for mariadb (pyproject.toml): finished with status 'error'
error: subprocess-exited-with-error
× Building wheel for mariadb (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [39 lines of output]
running bdist_wheel
running build
running build_py
creating build
creating build/lib.linux-x86_64-cpython-311
creating build/lib.linux-x86_64-cpython-311/mariadb
copying mariadb/init.py -> build/lib.linux-x86_64-cpython-311/mariadb
copying mariadb/init.py -> build/lib.linux-x86_64-cpython-311/mariadb
creating build/lib.linux-x86_64-cpython-311/mariadb/constants
copying mariadb/constants/init.py -> build/lib.linux-x86_64-cpython-311/mariadb/constants
copying mariadb/constants/CLIENT.py -> build/lib.linux-x86_64-cpython-311/mariadb/constants
copying mariadb/constants/INDICATOR.py -> build/lib.linux-x86_64-cpython-311/mariadb/constants
copying mariadb/constants/CURSOR.py -> build/lib.linux-x86_64-cpython-311/mariadb/constants
copying mariadb/constants/FIELD_TYPE.py -> build/lib.linux-x86_64-cpython-311/mariadb/constants
running build_ext
building 'mariadb._mariadb' extension
creating build/temp.linux-x86_64-cpython-311
creating build/temp.linux-x86_64-cpython-311/mariadb
gcc -pthread -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -DPY_MARIADB_MAJOR_VERSION=1 -DPY_MARIADB_MINOR_VERSION=0 -DPY_MARIADB_PATCH_VERSION=11 -I/usr/include/mysql -I/usr/include/mysql/mysql -I./include -I/home/openemm/.venv.3.11.8.final.0/include -I/home/openemm/opt/Python-3.11.8/include/python3.11 -c mariadb/mariadb.c -o build/temp.linux-x86_64-cpython-311/mariadb/mariadb.o -DDEFAULT_PLUGINS_SUBDIR="/usr/lib64/mysql/plugin"
mariadb/mariadb.c: In function 'PyInit__mariadb':
mariadb/mariadb.c:155:35: error: lvalue required as left operand of assignment
Py_TYPE(&MrdbConnection_Type) = &PyType_Type;
^
mariadb/mariadb.c:168:31: error: lvalue required as left operand of assignment
Py_TYPE(&MrdbCursor_Type) = &PyType_Type;
^
mariadb/mariadb.c:174:29: error: lvalue required as left operand of assignment
Py_TYPE(&MrdbPool_Type) = &PyType_Type;
^
mariadb/mariadb.c:180:34: error: lvalue required as left operand of assignment
Py_TYPE(&MrdbIndicator_Type) = &PyType_Type;
^
mariadb/mariadb.c:186:38: error: lvalue required as left operand of assignment
Py_TYPE(&Mariadb_Fieldinfo_Type) = &PyType_Type;
^
mariadb/mariadb.c:192:38: error: lvalue required as left operand of assignment
Py_TYPE(&Mariadb_DBAPIType_Type) = &PyType_Type;
^
error: command '/usr/bin/gcc' failed with exit code 1
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for mariadb
Failed to build mariadb
ERROR: Could not build wheels for mariadb, which is required to install pyproject.toml-based projects
Failed to install/upgrade python packages from file "/home/openemm/scripts/requirements/requirements.txt"
Dear @agnitas-org team,
It is possible to migrate the personal account to organization?
Converting:
It is possible to rename this account and create the organization and move/transfer the repository to the organization.
Rename account:
Create an organization:
Transfer a repository:
Like:
hello. Python 2 has reached end-of-life: https://www.python.org/downloads/ – please upgrade to python 3. thanks
I want to change host, but: host is read-only and may not be changed.
why? my installation doesn't have an open port on 127.0.0.1 ...
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.